Java泛型-获得对参数的访问
我有下一个代码:Java泛型-获得对参数的访问,java,generics,Java,Generics,我有下一个代码: class iCache<K,V> implements Map<Object, Object> { ...//Code } 类iCache实现Map { …//代码 } 如何获得K和V的类名?不行,编译器在编译时执行类型擦除。换句话说,K和V类型参数纯粹是编译时的概念,它们在运行时不可访问 您可以在运行时获取自定义映射类型中的键/值类。您不能。Java泛型不是这样工作的。在运行时,没有特定于类的信息可用(这称为擦除)。如果您确实需要此信息,则必须传
class iCache<K,V> implements Map<Object, Object>
{
...//Code
}
类iCache实现Map
{
…//代码
}
如何获得K和V的类名?不行,编译器在编译时执行类型擦除。换句话说,K和V类型参数纯粹是编译时的概念,它们在运行时不可访问
您可以在运行时获取自定义映射类型中的键/值类。您不能。Java泛型不是这样工作的。在运行时,没有特定于类的信息可用(这称为
擦除
)。如果您确实需要此信息,则必须传入例如类
对象。如果您扩展iCache
并希望获得用于声明子类的打字机参数(如下所示):
如果您在实例化时提供如下参数
iCache<Integer,Long> cache = new iCache<Integer,Long>();
iCache缓存=新的iCache();
那么你就倒霉了()。这些类型将被删除。将类和类作为参数传递到构造函数中,以传递原始类型。存储为字段。注意:无论如何,您的参数化是不好的:您也需要将K和V传递给Map,否则您会给自己带来更多的痛苦。实际上,您可以对键和值调用getClass()方法。值得注意的是,运行时的键/值类可能与实际参数不同(它可以是K和V的子类).我的问题是,如果我有
iCache缓存=新的iCache(20)代码>我可以放置所有东西,比如cache.put(0,“test”)代码>我真的不知道如何修复它。@ExR:你需要实现Map
,而不是Map
!
Class clazz = ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
iCache<Integer,Long> cache = new iCache<Integer,Long>();