Class <T>的Java泛型

Jay*_*Jay 8 java generics

所以我有一张地图:

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)

这让我感到困惑......请帮忙...

cle*_*tus 8

更改:

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泛型只不过是用于投射的烟雾和镜子.