泛型语法map.entry

时间:2012-07-28 12:05:57

标签: java generics syntax

我有一个变量:

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

我想为它分配一个类而不实例化任何东西。但编译器不允许我写:

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

我该如何完成作业?

1 个答案:

答案 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;

(无需在发生此分配的方法上发出警告;您可以直接将其放在作业前面。)

享受! :)