繁体   English   中英

泛型语法map.entry

[英]generics syntax map.entry

我有一个变量:

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 (raw)和Map.Entry<String, Boolean> (参数化)类型。 不幸的是,您无法使用.class在类型文字中添加类型参数。 所以你必须施展。 但你不能直接这样做; 你必须通过Class<?>进行'绕道'。 我不记得为什么,确切地说,我很抱歉:)。

此外,你会得到一个“未经检查”的警告,你可以压制它,因为你知道(在这种情况下)演员阵容将永远成功。 所以:

@SuppressWarnings("unchecked")
Class<Map.Entry<String, Boolean>> clazz =
    (Class<Map.Entry<String, Boolean>>)(Class<?>)Map.Entry.class;

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

请享用! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM