我有一个变量:
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/