Java 检查给定对象是否为泛型,并获取参数数
有没有办法检查Java 检查给定对象是否为泛型,并获取参数数,java,generics,Java,Generics,有没有办法检查对象是否为泛型,需要多少参数?我知道由于类型擦除,无法获取这些参数的类的名称,但也无法获取上述名称吗?如果对象的类本身是泛型的,您只需检查: obj.getClass().getTypeParameters(); 这将为您提供一个包含所有类型参数的数组,并至少提供类型参数的名称。但是,我不认为它提供了实际使用类型的详细信息 返回TypeVariable对象数组,这些对象按声明顺序表示由此GenericDeclaration对象表示的泛型声明声明的类型变量。如果基础泛型声明未声明任
对象
是否为泛型,需要多少参数?我知道由于类型擦除,无法获取这些参数的类的名称,但也无法获取上述名称吗?如果对象的类本身是泛型的,您只需检查:
obj.getClass().getTypeParameters();
这将为您提供一个包含所有类型参数的数组,并至少提供类型参数的名称。但是,我不认为它提供了实际使用类型的详细信息
返回TypeVariable对象数组,这些对象按声明顺序表示由此GenericDeclaration对象表示的泛型声明声明的类型变量。如果基础泛型声明未声明任何类型变量,则返回长度为0的数组
如果对象本身的类是泛型的,则只需检查:
obj.getClass().getTypeParameters();
这将为您提供一个包含所有类型参数的数组,并至少提供类型参数的名称。但是,我不认为它提供了实际使用类型的详细信息
返回TypeVariable对象数组,这些对象按声明顺序表示由此GenericDeclaration对象表示的泛型声明声明的类型变量。如果基础泛型声明未声明任何类型变量,则返回长度为0的数组
只有java编译器知道泛型类型,因此在编译之后,基本上这些知识就丢失了,并且您的代码对传递的泛型参数没有任何线索
话虽如此,在实现和实例化匿名类时,显然不会发生这种情况(运行时类型擦除时的知识丢失)。这一点在本文的一个示例中得到了很好的解释只有java编译器知道泛型类型,因此在编译之后,基本上这些知识就丢失了,并且您的代码对传递泛型参数没有任何线索
话虽如此,在实现和实例化匿名类时,显然不会发生这种情况(运行时类型擦除时的知识丢失)。本文中的一个例子很好地解释了这一点@MuratK。那么我如何找到这些信息呢?我不知道,但那个家伙正在谈论反射api。那么,也许你看看那里?@MuratK。那么我如何找到这些信息呢?我不知道,但那个家伙正在谈论反射api。那么,也许看看那里?