+ private final LoadingCache<Class<?>, DataObjectStreamer<?>> streamers = CacheBuilder.newBuilder().build(
+ new CacheLoader<Class<?>, DataObjectStreamer<?>>() {
+ @Override
+ public DataObjectStreamer<?> load(final Class<?> key) throws ReflectiveOperationException {
+ final Class<?> streamer = DataObjectStreamerGenerator.generateStreamer(loader, BindingCodecContext.this,
+ key);
+ final Field instance = streamer.getDeclaredField(DataObjectStreamerGenerator.INSTANCE_FIELD);
+ return (DataObjectStreamer<?>) instance.get(null);
+ }
+ });
+ private final LoadingCache<Class<?>, DataObjectSerializer> serializers = CacheBuilder.newBuilder().build(
+ new CacheLoader<Class<?>, DataObjectSerializer>() {
+ @Override
+ public DataObjectSerializer load(final Class<?> key) throws ExecutionException {
+ return new DataObjectSerializerProxy(streamers.get(key));
+ }
+ });
+
+ private final @NonNull CodecClassLoader loader = CodecClassLoader.create();