所以我有一张地图:
Map<String, Class> format = new HashMap<String, Class>();
Run Code Online (Sandbox Code Playgroud)
我会像这样添加元素:
format.put("Vendor Number", Integer.class);
format.put("Vendor Dispatch", Date.class);
....
Run Code Online (Sandbox Code Playgroud)
我有一个通用的方法如下:
public static <T> T verifyType(String name, Class<T> type) {
if (type == Integer.class) {
return type.cast(new Integer(Integer.parseInt(name)));
}
......
return null;
}
Run Code Online (Sandbox Code Playgroud)
现在这段代码很好用,没有编译器问题:
Integer i = verifyType("100",Integer.class);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这个:
Integer i = verifyType("100",format.get("Vendor Number"));
OR
Class type = Integer.class
Integer i = verifyType("100",type);
Run Code Online (Sandbox Code Playgroud)
编译器向我显示此警告:类型安全:未经检查的调用verifyType(String,Class)的泛型方法verifyType(String,Class)
这让我感到困惑......请帮忙...
更改:
Class type = Integer.class
Integer i = verifyType("100",type);
Run Code Online (Sandbox Code Playgroud)
至
Class<Integer> type = Integer.class
Integer i = verifyType("100",type);
Run Code Online (Sandbox Code Playgroud)
通过仅将类型声明为"类",您将丢失泛型参数,而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"));
Run Code Online (Sandbox Code Playgroud)
因类型擦除而无法真正解决.编译器无法根据运行时消失的泛型参数来推断类型.这是因为Java泛型只不过是用于投射的烟雾和镜子.