有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java泛型语法映射。进入

我有一个变量:

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

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

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

我怎么做作业


共 (1) 个答案

  1. # 1 楼答案

    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;
    

    (无需在发生此赋值的方法上添加警告;只需将其直接放在赋值的前面即可。)

    享受!:)