3

我有一个变量:

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

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

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

我该怎么做?

4

1 回答 1

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;

(不需要在这个赋值发生的方法上加上警告;你可以直接把它放在赋值前面。)

享受!:)

于 2012-07-28T12:21:13.623 回答