检查给定对象是否是通用的并且得不到。参数

时间:2018-02-01 15:11:56

标签: java generics

有没有办法检查Object是否是通用的,它需要多少参数?我知道由于类型擦除而无法得到这些参数类的名称,但是也不可能得到上述内容吗?

2 个答案:

答案 0 :(得分:2)

只有java编译器知道泛型类型,因此在编译之后,基本上这些知识会丢失,并且您的代码不知道传递的泛型参数。

现在有人说,当你实现和实例化一个匿名类时,这显然不会发生(在运行时丢失知识 - 类型擦除)。通过本文Using TypeTokens to retrieve generic parameters

中的示例可以很好地解释这一点

答案 1 :(得分:1)

如果对象本身的类是通用的,您只需检查:

obj.getClass().getTypeParameters();

这应该为您提供所有类型参数的数组,并且至少还为您提供类型参数的名称。但是我不认为它提供了有关所使用的实际类型的详细信息。

  

返回TypeVariable对象的数组,这些对象表示由此GenericDeclaration对象以声明顺序表示的泛型声明声明的类型变量。如果底层泛型声明没有声明类型变量,则返回长度为0的数组。