我有一个变量:
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;
(不需要在这个赋值发生的方法上加上警告;你可以直接把它放在赋值前面。)
享受!:)