【发布时间】:2017-05-22 17:16:33
【问题描述】:
我有以下带有泛型参数的方法:
public <K> Store<K> createStore(final Class<K> keyType);
这只会在 cassandra 中为我创建一个具有给定类型的表。
我想检查对于给定的keyType 是否已经存在TypeCodec 的默认实现。如果是,那么我只想使用此编解码器,否则我将使用自己编写的通用编解码器。
Cassandra 的CodecRegistry 类提供了方法:
public <T> TypeCodec<T> codecFor(DataType cqlType, Class<T> javaType);
public <T> TypeCodec<T> codecFor(DataType cqlType);
public <T> TypeCodec<T> codecFor(T value);
public <T> TypeCodec<T> codecFor(DataType cqlType, TypeToken<T> javaType);
public <T> TypeCodec<T> codecFor(DataType cqlType, T value);
问题是,这些方法都不适合我的用例。几乎所有方法都需要DatatType cqlTypeparameter,我无法提供,因为我没有找到将给定的keyType 类文字映射到可能匹配的Cassandra Datatype 的方法。 (这可能吗?)
我想要的唯一接近的是:
public <T> TypeCodec<T> codecFor(T value);
但它需要类的 instance 而不是类文字。
所以我想要的是:
public <T> TypeCodec<T> codecFor(Class<T> javaType);
这将为我提供用于给定类型的默认 TypeCodec,即如果我传入类型“java.lang.Integer”,则应返回对应的 cassandra TypeCodec for Integers。
对如何实现此行为有何建议?
【问题讨论】:
标签: java cassandra datastax-java-driver