java - 泛型语法 map.entry

标签 java generics syntax

我有一个变量:

Class<Map.Entry<String, Boolean>> clazz;

我想在不实例化任何东西的情况下为其分配一个类。但是编译器不允许我写:

Class<Map.Entry<String, Boolean>> clazz = Map.Entry<String, Boolean>.class;

我该如何完成作业?

最佳答案

Class<Map.Entry<String, Boolean>> clazz =
    (Class<Map.Entry<String, Boolean>>)(Class<?>)Map.Entry.class;

啊,类型删除的乐趣。

Java 编译器区分类型 Map.Entry (原始)和 Map.Entry<String, Boolean> (参数化)。不幸的是,您不能使用 .class 在类型字面量中添加类型参数。 .所以你必须施法。但是你不能直接这样做;你得绕道Class<?> .我不记得为什么,确切地说,我很抱歉 :)。

此外,您还会收到一个“未检查”警告,您可以取消该警告,因为您知道(在这种情况下)转换总是会成功。所以:

@SuppressWarnings("unchecked")
Class<Map.Entry<String, Boolean>> clazz =
    (Class<Map.Entry<String, Boolean>>)(Class<?>)Map.Entry.class;

(无需将警告放在发生此赋值的方法上;您可以将其直接放在赋值之前。)

尽情享受吧! :)

关于java - 泛型语法 map.entry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11700871/

相关文章:

syntax - 为什么 Go 方法接收类型不能是接口(interface)?

javascript - 火狐浏览器中的 Jquery ?

java - 如何将 @ManyToMany 与同一个表上的两个列表一起使用

Java:如何解析 lambda 参数的泛型类型?

java - java中的通用通配符。编译错误。

swift - Swift 中的通用/多态搜索

Ruby:从 Ruby 中的变量创建散列键和值

java - Android - 将嵌套 map 转换为 JSON 字符串

java - 在浏览器中预览本地 html 文件

java - 为什么需要 setSize 方法才能在 SWT 中的 Composite 上显示滚动?