Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查给定对象是否为泛型,并获取参数数_Java_Generics - Fatal编程技术网

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。那么,也许看看那里?