我有一个变量:
Class<Map.Entry<String, Boolean>> clazz;
我想为它分配一个类而不实例化任何东西。但编译器不允许我写:
Class<Map.Entry<String, Boolean>> clazz = Map.Entry<String, Boolean>.class;
我该如何完成作业?
答案 0 :(得分:2)
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;
(无需在发生此分配的方法上发出警告;您可以直接将其放在作业前面。)
享受! :)