代码之家  ›  专栏  ›  技术社区  ›  Jagmal

如何访问泛型的类对象?

  •  3
  • Jagmal  · 技术社区  · 16 年前

    如何访问泛型的类对象?

    目前,我是这样做的:

    List<String> list= new ArrayList<String>();
    list.getClass();
    

    这样行吗?或者,该怎么办?

    2 回复  |  直到 16 年前
        1
  •  7
  •   Joao da Silva    16 年前

    它将返回与arraylist.class相同的值。Java泛型在运行时删除泛型类型;换句话说,从“列表”中,您将永远不知道元素类型是字符串。这里有一个很好的常见问题解答

    http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html

        2
  •  3
  •   Andrzej Doyle    16 年前

    确实,擦除使获取给定对象的泛型类型信息变得不可能,因为泛型只保存在源代码的结构中。但是,这并不意味着不可能获得泛型类型参数,并且在许多重要情况下(例如,为给定的类/方法构建接口),您可以这样做。如果通过反射获取类的元素,则可以获取有关所使用的声明类型的一般信息。

    例如,获取 java.lang.reflect.Method 通过反射和呼叫,例如 getGenericReturnType() 关于它。这将返回的实例 java.lang.reflect.Type ,可以简单地 Class 但也可能是 ParameterizedType 甚至 WildcardType 在适当的情况下。后两种情况都允许您查看声明的泛型类型。除了 instanceof 检查,但如果你需要的话,信息就在那里。

    这可以提供关于字段的泛型类型、方法参数和返回类型以及类本身(它自己的泛型参数以及它的超类和实现的接口)的信息。如果需要在反射上下文中对泛型方法执行类型安全参数检查,这可能非常有用。