@SuppressWarnings("unchecked") static <E, K, N, SV, S extends State, IS extends S> IS create( StateDescriptor<S, SV> stateDesc, StateTable<K, N, SV> stateTable, TypeSerializer<K> keySerializer) { return (IS) new HeapListState<>( (StateTable<K, N, List<E>>) stateTable, keySerializer, (TypeSerializer<List<E>>) stateTable.getStateSerializer(), stateTable.getNamespaceSerializer(), (List<E>) stateDesc.getDefaultValue()); } }
@SuppressWarnings("unchecked") static <E, K, N, SV, S extends State, IS extends S> IS create( StateDescriptor<S, SV> stateDesc, StateTable<K, N, SV> stateTable, TypeSerializer<K> keySerializer) { return (IS) new HeapListState<>( (StateTable<K, N, List<E>>) stateTable, keySerializer, (TypeSerializer<List<E>>) stateTable.getStateSerializer(), stateTable.getNamespaceSerializer(), (List<E>) stateDesc.getDefaultValue()); } }
@Override public <N, T> InternalListState<K, N, T> createListState( TypeSerializer<N> namespaceSerializer, ListStateDescriptor<T> stateDesc) throws Exception { StateTable<K, N, List<T>> stateTable = tryRegisterStateTable(namespaceSerializer, stateDesc); return new HeapListState<>( stateTable, keySerializer, stateTable.getStateSerializer(), stateTable.getNamespaceSerializer(), stateDesc.getDefaultValue()); }
@Override public <N, T> InternalListState<N, T> createListState( TypeSerializer<N> namespaceSerializer, ListStateDescriptor<T> stateDesc) throws Exception { // the list state does some manual mapping, because the state is typed to the generic // 'List' interface, but we want to use an implementation typed to ArrayList // using a more specialized implementation opens up runtime optimizations StateTable<K, N, ArrayList<T>> stateTable = tryRegisterStateTable( stateDesc.getName(), stateDesc.getType(), namespaceSerializer, new ArrayListSerializer<T>(stateDesc.getElementSerializer())); return new HeapListState<>(stateDesc, stateTable, keySerializer, namespaceSerializer); }