java.lang.Object
cn.wjybxx.dsoncodec.DsonCodecConfig
泛型类Codec
由于泛型类的Codec不能被直接构造,因此只能先将其类型信息存储下来,在运行时根据泛型参数动态构造。
1. Codec编码的类型和要编码的类型有相同的泛型参数列表。且必须包含接收TypeInfo的构造函数 -- 可参考CollectionCodec。
2. 如果Codec的是面向接口或抽象类的,构造函数还可接收一个Supplier的参数。
3. 不会频繁查询,因此不必太在意匹配算法的效率。
4. 数组和泛型是不同的,数组都对应ArrayCodec,因此不需要再这里存储。
5. 请避免运行时修改数据,否则可能造成线程安全问题。
6. 反射难以确定泛型擦参数除后的类型,为避免增加Codec和运行时的复杂度,泛型原型的信息在注册时指定。
与TypeMetaConfig的关系
Codec与TypeMete在配置和运行时都是分离的,它们属于不同的体系; 但Codec关联的encoderType必须在TypeMetaConfig中存在。
合并规则
多个Config合并时,越靠近用户,优先级越高 -- 因为这一定能解决冲突。- 作者:
- wjybxx date - 2024/10/11
-
字段概要
字段 -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明addCaster(DsonCodecCaster caster) 添加类型转换器addCasters(Collection<? extends DsonCodecCaster> casters) 配置编解码器配置编解码器<T> DsonCodecConfig配置编解码器 适用超类Codec的默认解码实例可赋值给当前类型的情况,eg:IntList => IntCollectionCodec。配置编解码器addCodecs(Collection<? extends DsonCodec<?>> codecs) 配置编解码器addDecoder(cn.wjybxx.base.TypeInfo typeInfo, DsonCodec<?> codec) 配置解码器 -- 适用已构造泛型<T> DsonCodecConfigaddDecoder(Class<T> clazz, DsonCodec<? extends T> codec) 配置解码器addEncoder(cn.wjybxx.base.TypeInfo typeInfo, DsonCodec<?> codec) 配置编码器 -- 适用已构造泛型<T> DsonCodecConfigaddEncoder(Class<T> clazz, DsonCodec<? super T> codec) 配置编码器addGenericCodec(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType) addGenericCodec(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Class<?> implType) addGenericCodec(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Supplier<?> factory) addGenericCodec(GenericCodecInfo genericCodecInfo) 增加一个codec配置addGenericDecoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType) addGenericDecoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Class<?> implType) addGenericDecoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Supplier<?> factory) addGenericDecoder(GenericCodecInfo genericCodecInfo) 添加解码器addGenericEncoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType) addGenericEncoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Class<?> implType) addGenericEncoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Supplier<?> factory) addGenericEncoder(GenericCodecInfo genericCodecInfo) 添加编码器addGenericHelper(GenericHelper genericHelper) 添加泛型工具类addGenericHelpers(Collection<? extends GenericHelper> genericHelpers) 添加泛型工具类<T> DsonCodecConfigaddOptimizedType(Class<T> encoderType, Class<? super T> declaredType) 添加可优化编码类型(无需写入类型信息的情况)<T> DsonCodecConfigaddOptimizedType(Class<T> encoderType, Class<? super T> declaredType, boolean val) 添加可优化编码类型(无需写入类型信息的情况) 泛型类请配置泛型原型类voidclear()清理数据static DsonCodecConfigfromCodecs(DsonCodec<?>... codecs) 根据codecs创建一个Config -- 返回的实例不可变static DsonCodecConfigfromCodecs(Collection<? extends DsonCodec<?>> codecs) 根据codecs创建一个Config -- 返回的实例不可变static DsonCodecConfigfromConfigs(Collection<? extends DsonCodecConfig> configs) 合并多个Config为单个Config -- 返回的实例不可变DsonCodec<?> getDecoder(cn.wjybxx.base.TypeInfo typeInfo) DsonCodec<?> getEncoder(cn.wjybxx.base.TypeInfo typeInfo) Map<Class<?>, GenericCodecInfo> getGenericDecoderInfo(Class<?> genericTypeDefine) Map<Class<?>, GenericCodecInfo> getGenericEncoderInfo(Class<?> genericTypeDefine) mergeFrom(DsonCodecConfig other) 合并配置static DsonCodecConfig创建一个默认配置DsonCodec<?> removeDecoder(cn.wjybxx.base.TypeInfo typeInfo) 删除解码器 -- 适用已构造泛型DsonCodec<?> removeDecoder(Class<?> clazz) 删除解码器 -- 用于解决冲突DsonCodec<?> removeEncoder(cn.wjybxx.base.TypeInfo typeInfo) 删除编码器 -- 适用已构造泛型DsonCodec<?> removeEncoder(Class<?> clazz) 删除编码器 -- 用于解决冲突转换为不可变实例
-
字段详细资料
-
DEFAULT
全局默认配置
-
-
构造器详细资料
-
DsonCodecConfig
public DsonCodecConfig()
-
-
方法详细资料
-
getEncoderDic
-
getDecoderDic
-
getGenericEncoderDic
-
getGenericDecoderDic
-
getCasters
-
getOptimizedTypes
-
getGenericHelpers
-
fromCodecs
根据codecs创建一个Config -- 返回的实例不可变 -
fromCodecs
根据codecs创建一个Config -- 返回的实例不可变 -
fromConfigs
合并多个Config为单个Config -- 返回的实例不可变 -
toImmutable
转换为不可变实例 -
clear
public void clear()清理数据 -
mergeFrom
合并配置 -
addCodecs
配置编解码器 -
addCodecs
配置编解码器 -
addCodec
配置编解码器 -
addCodec
配置编解码器 适用超类Codec的默认解码实例可赋值给当前类型的情况,eg:IntList => IntCollectionCodec。 -
addCodec
配置编解码器 -
addEncoder
配置编码器 -
addEncoder
配置编码器 -- 适用已构造泛型 -
addDecoder
配置解码器 -
addDecoder
配置解码器 -- 适用已构造泛型 -
removeEncoder
删除编码器 -- 用于解决冲突 -
removeEncoder
删除编码器 -- 适用已构造泛型 -
removeDecoder
删除解码器 -- 用于解决冲突 -
removeDecoder
删除解码器 -- 适用已构造泛型 -
addGenericCodec
public DsonCodecConfig addGenericCodec(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType) - 参数:
genericType- 泛型定义类codecType- 解码器类型- 返回:
- this
-
addGenericCodec
public DsonCodecConfig addGenericCodec(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Class<?> implType) - 参数:
genericType- 泛型定义类codecType- 解码器类型implType- 实现类类型- 返回:
- this
-
addGenericCodec
public DsonCodecConfig addGenericCodec(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Supplier<?> factory) - 参数:
genericType- 泛型定义类codecType- 解码器类型factory- 实例工厂- 返回:
- this
-
addGenericCodec
增加一个codec配置- 参数:
genericCodecInfo- 编解码器类的信息
-
addGenericEncoder
public DsonCodecConfig addGenericEncoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType) - 参数:
genericType- 泛型定义类codecType- 解码器类型- 返回:
- this
-
addGenericEncoder
public DsonCodecConfig addGenericEncoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Class<?> implType) - 参数:
genericType- 泛型定义类codecType- 解码器类型implType- 实现类类型- 返回:
- this
-
addGenericEncoder
public DsonCodecConfig addGenericEncoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Supplier<?> factory) - 参数:
genericType- 泛型定义类codecType- 解码器类型factory- 实例工厂- 返回:
- this
-
addGenericEncoder
添加编码器- 参数:
genericCodecInfo- 编解码器类的信息- 返回:
- this
-
addGenericDecoder
public DsonCodecConfig addGenericDecoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType) - 参数:
genericType- 泛型定义类codecType- 解码器类型- 返回:
- this
-
addGenericDecoder
public DsonCodecConfig addGenericDecoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Class<?> implType) - 参数:
genericType- 泛型定义类codecType- 解码器类型implType- 实现类类型- 返回:
- this
-
addGenericDecoder
public DsonCodecConfig addGenericDecoder(cn.wjybxx.base.TypeInfo genericType, Class<? extends DsonCodec> codecType, Supplier<?> factory) - 参数:
genericType- 泛型定义类codecType- 解码器类型factory- 实例工厂- 返回:
- this
-
addGenericDecoder
添加解码器- 参数:
genericCodecInfo- 编解码器类的信息- 返回:
- this
-
addCaster
添加类型转换器 -
addCasters
-
addOptimizedType
添加可优化编码类型(无需写入类型信息的情况)- 参数:
encoderType- 编码类型declaredType- 声明类型
-
addOptimizedType
public <T> DsonCodecConfig addOptimizedType(Class<T> encoderType, Class<? super T> declaredType, boolean val) 添加可优化编码类型(无需写入类型信息的情况) 泛型类请配置泛型原型类- 参数:
encoderType- 编码类型declaredType- 声明类型val- 是否可优化
-
addGenericHelper
添加泛型工具类 -
addGenericHelpers
添加泛型工具类 -
getEncoder
-
getDecoder
-
getGenericEncoderInfo
-
getGenericDecoderInfo
-
newDefaultRegistry
创建一个默认配置
-