作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
你好,我有一个 HashMap ,其值为:
private static final LinkedHashMap<Class<? extends Annotation> , Class<? extends AGenerator<?>>> annotationGeneratorMap = new LinkedHashMap<Class<? extends Annotation>, Class<? extends AGenerator<?>>>();
我的数字生成器看起来像:
public abstract class NumericGenerator<T extends Number> extends AGenerator<T>{
public NumericGenerator(Field field) {
super(field);
// TODO Auto-generated constructor stub
}
public T random() {
// TODO Auto-generated method stub
return null;
}
}
当我需要将此类放入 hashmap 时,我遇到了问题:
annotationGeneratorMap.put(GenerateNumeric.class, NumericGenerator.class);
并且在 eclipse 中我有错误方法不适用于参数 ???
但是:
annotationGeneratorMap.put(GenerateNumeric.class, (Class<? extends AGenerator<?>>) NumericGenerator.class);
@SuppressWarnings("unchecked") 很好..:/
我可以不用类型转换就做这个吗?? (Class<? extends AGenerator<?>>) NumericGenerator.class
最佳答案
使用Class<? extends AGenerator>
相反
LinkedHashMap<
Class<? extends Annotation>,
Class<? extends AGenerator> > annotationGeneratorMap = new LinkedHashMap<>()
在 Java 中,类可以表示原始类型,但不能表示泛型。
有一个类 List
, 但没有 List<String>
的类.
所以你可以声明Class<? extends List>
,与 ArrayList.class
兼容等因为原始类型 ArrayList
是 List
的子类型.
但是Class<? extends List<?>>
没有多大意义,因为没有类是 List<?>
的子类型.
这一切都归功于删除。
关于java泛型类转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12467255/
我是一名优秀的程序员,十分优秀!