所以我有一张 map :
Map<String, Class> format = new HashMap<String, Class>();
我会像这样向其添加元素:
format.put("Vendor Number", Integer.class);
format.put("Vendor Dispatch", Date.class);
....
我有一个通用的方法,如下所示:
public static <T> T verifyType(String name, Class<T> type) {
if (type == Integer.class) {
return type.cast(new Integer(Integer.parseInt(name)));
}
......
return null;
}
现在,这段代码可以很好地工作,而不会出现编译器问题:
Integer i = verifyType("100",Integer.class);
但是,当我尝试这样做时:
Integer i = verifyType("100",format.get("Vendor Number"));
OR
Class type = Integer.class
Integer i = verifyType("100",type);
编译器向我显示此警告:
类型安全:通用方法verifyType(String,Class)的未经检查的调用verifyType(String,Class)
这让我感到困惑...请帮助...
最佳答案
改变:
Class type = Integer.class
Integer i = verifyType("100",type);
至
Class<Integer> type = Integer.class
Integer i = verifyType("100",type);
通过仅将类型声明为“Class”,就失去了通用参数,并且verifyType()方法无法推断出该类,因此产生了未经检查的警告。
这个问题:
Map<String, Class> format = new HashMap<String, Class>();
format.put("Vendor Number", Integer.class);
format.put("Vendor Dispatch", Date.class);
Integer i = verifyType("100",format.get("Vendor Number"));
由于类型擦除,无法真正解决。编译器无法根据运行时使用的通用参数来推断类型。这是因为Java泛型只不过是用于转换的烟雾和镜像。