【问题标题】:How to implement constraint that a type parameter is a parameterized type如何实现类型参数是参数化类型的约束
【发布时间】:2017-11-28 15:58:26
【问题描述】:

我想制作一个程序,它从FileDialog 获取.class(或者可能是.java 文件)文件,条件是该类是泛型类型,例如LinkedList<T>,@ 987654325@,或用户选择的任何数据结构。如果该类不是泛型类型,我想抛出异常。为了进一步解释,我想测试一下

inputClassX instanceof ParameterizedType

但因为我想测试任何可能无法实现 ParameterizedType 的任意类,所以我无法进行该测试。

我将如何测试一个对象或 Class 是否是泛型类型?

【问题讨论】:

  • 我相信编译后的类不包含有关泛型类型参数的信息,所以不,如果不查看源代码,您将无法对其进行运行时测试。在这里打开 .class 文件的目的是什么?是用于某种插件系统吗?
  • @E_net4 类文件基本上保存了编译时已知的所有信息,除了(在我脑海中)不是运行时保留的注释和(取决于编译选项)参数名称方法。来自类实例创建表达式(如new ArrayList<String>())的特定对象的类型参数本身就是被擦除的。

标签: java generics reflection parameterized-types


【解决方案1】:

对于任意的Class对象,你可以检查getTypeParameters返回的数组的长度,如果它不为零,则表示该类具有泛型类型参数:

System.out.println(String.class.getTypeParameters().length != 0); // false
System.out.println(List.class.getTypeParameters().length != 0); // true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-23
    • 2011-09-07
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多