所以我有一张 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泛型只不过是用于转换的烟雾和镜像。

10-02 23:15