获取通用类型信息

时间:2014-04-09 04:09:09

标签: java

我有这种方法需要获取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

0 个答案:

没有答案