我有这种方法需要获取V
类型信息:
@Override
public V get(String key) {
Preconditions.checkNotNull(key, "Null id object");
Map<String, Object> map = null;
String oldNamespace = NamespaceManager.get();
NamespaceManager.set(_namespace);
try {
map = store().get(KeyStructure.createKey("V.class.getName()", key)); // here
} catch (Exception e) {
// TODO Handle exception
e.printStackTrace();
} finally {
if (oldNamespace != null)
NamespaceManager.set(oldNamespace);
}
return (V) Mapper.createTObject(V.class, map); // and here
}
考虑到我需要保留get
方法参数。
我认为这是可能的,因为在编译时将使用该方法:
KVS<String,Friend> kvs = new KVS<String,Friend>();
Friend f = kvs.get("user.123");
然后V
将属于Friend
类
更新
我试过了:
public class StringObjectKeyValueStore<V> extends AbstractObjectStore<V>
implements KeyValueStore<String, V> {
}
public abstract class AbstractObjectStore<V> {
private final Class<V> type;
public AbstractObjectStore(String namespace, String collection) {
this.type = (Class<V>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
然而它抛出:
java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class