当前位置: 首页 > 面试题库 >

具有类的Java泛型

鱼阳伯
2023-03-14
问题内容

所以我有一张地图:

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泛型只不过是用于转换的烟雾和镜像



 类似资料:
  • 问题内容: 我想拥有一个Class对象,但是我想强迫它代表的任何类扩展A类并实现接口B。 我可以: 要么: 但我不能两者都做。有没有办法做到这一点? 问题答案: 实际上,你可以做你想做的事。如果要提供多个接口或一个类加接口,则必须使通配符看起来像这样: 请参见sun.com上的泛型教程,特别是页面底部的“ 绑定类型参数”部分。实际上,如果需要,你可以列出多个接口,并& InterfaceName根

  • 问题内容: 我为缓存编写了一个函数来检索特定对象。这样我就不需要投了。 我正在这样使用 但是现在我的缓存中有一个字符串列表,我不能这样使用 问题是。我对Java非常陌生,我该怎么写? 问题答案: 您无法获得的类,在您的情况下,唯一的方法是:

  • 我正在尝试用来自spring WebFlux的WebClient制作一个客户端库。 服务器返回如下JSON所示的响应: 结果字段包含元素数组,这些元素可以根据使用的API而不同。 有关该API的更多信息,请参阅ServiceNow产品中的表API。 正如您在文档中所看到的,API路径如下所示:GET/now/table/{tableName},其中tableName可以是不同的值,tipology

  • 在java 8中创建新代码后,我想清除声纳问题。 我的代码: 声纳说: Lambda应该替换为方法引用。方法/构造函数引用比使用lambda更紧凑和可读性,因此是首选。同样,空检查可以替换为对Object::isNull和Object::nonNull方法的引用。 我想要更改映射(arg-

  • 问题是: 创建一个名为Duo的泛型类,它有两个参数a和B。声明一个名为a类型的第一个变量,以及一个名为B类型的第二个变量。创建一个接受这两个参数的构造函数。在构造函数中,将这些参数分别分配给声明的变量。 这是我能想到的解决方案: 然后,当我继续问下一个问题时,我被绊住了。问题是: 使用问题4中的Duo类声明并创建两个对象,如下所示: a) 第一个名为sideShape的对象分别由字符串类型和整数类

  • 我试图在一个方法中使用泛型,在这个方法中,我将一个json反序列化为pojo,这样它就可以返回任何对象类型。 这里我的代码: 问题是