Мое приложение бросаетПолучить общее название класса типа во время выполнения
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
Для этого кода:
public class DsMap<K,V> implements Map<K, V>{
protected Class<K> kClazz;
protected Class<V> vClazz;
// Called during DS.getMap(mapName) method
public DsMap(String name) {
ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
Type typeK = genericSuperclass.getActualTypeArguments()[0];
Type typeV = genericSuperclass.getActualTypeArguments()[1];
if (typeK instanceof Class) {
this.kClazz = (Class<K>) typeK;
} else if (typeK instanceof ParameterizedType) {
this.kClazz = (Class<K>) ((ParameterizedType)typeK).getRawType();
}
if (typeV instanceof Class) {
this.vClazz = (Class<V>) typeV;
} else if (typeV instanceof ParameterizedType) {
this.vClazz = (Class<V>) ((ParameterizedType)typeV).getRawType();
}
}
}
То, что я пытаюсь добиться, чтобы получить имя класса K
и V
во время выполнения:
Такое, что делает это:
Map<String,String> dsMap = DS.getMap(mapName);
я доберусь java.lang.String
для имен классов kClazz
и vClazz
, или получить то, что имя класса параметрироваться (без инстанцирования Class<K>
и Class<V>
)
Что может быть не так в моем коде?
При таком подходе к работе, вы должны сделать 'DsMap' абстрактным и создать его экземпляр с реальными типами, например, 'new DsMap() {}'. –
Возможно, вам будет полезно посмотреть документацию и реализацию ['TypeToken' в Гуаве] (http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/ отражают/TypeToken.html). –