Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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 获取泛型T的类型_Java_Generics - Fatal编程技术网

Java 获取泛型T的类型

Java 获取泛型T的类型,java,generics,Java,Generics,C#允许使用typeof(T)方法获取泛型参数的类型,而无需实例化T参数。但是在Java中,任何时候我都有genericT参数,我想确定我必须创建该参数的实例的类型,例如通过使用类类型来确定它是什么类型 与C#提供的方法相比,Java中的这种方法看起来不必要地冗长和复杂。 我想知道在不需要实例化泛型参数的情况下,确定泛型参数类型的最佳选择是什么(例如if(T是整数)) Java中的泛型是一种编译时功能,因此Java和C#之间不匹配。因此,除非向您传递了该类型的对象,或者您自己创建了一个对象,或者

C#允许使用
typeof(T)
方法获取泛型参数的类型,而无需实例化
T
参数。但是在Java中,任何时候我都有generic
T
参数,我想确定我必须创建该参数的实例的类型,例如通过使用
类类型来确定它是什么类型

与C#提供的方法相比,Java中的这种方法看起来不必要地冗长和复杂。
我想知道在不需要实例化泛型参数的情况下,确定泛型参数类型的最佳选择是什么(例如
if(T是整数)

Java中的泛型是一种编译时功能,因此Java和C#之间不匹配。因此,除非向您传递了该类型的对象,或者您自己创建了一个对象,或者实际上以其他方式告诉了类,否则您无法在运行时执行任何操作来确定该类型


人们普遍认为,甚至尝试寻找类型都是一个坏主意。它通常表示您没有正确设计类层次结构。

泛型在编译时为true。。。但是你可以给编译器提示t到底是什么

通过传入T的实际运行时类,您可以允许编译器允许您了解T所代表的类的运行时知识

例如:

public <T> boolean isObjectT(Class<T> type, Object object){
    return object.getClass().isAssignableFrom(type);
}
public boolean isobject(类类型,对象){
返回object.getClass().isAssignableFrom(类型);
}
这个问题的答案有点明确了参数化类型的限制:

如果您只是试图从子类获取信息。。。您可以在此问题上尝试使用参数化类型的反射:


对于更复杂的需求,我很幸运。

别无选择。提供适当的
Class
对象。C#的可能副本已具体化泛型。Java不使用泛型类型擦除,而是使用泛型类型擦除。除了通过考试,别无选择。@PierreOverFlow:它看起来真的像是它的翻版——基本上是问同样的问题,但已经知道答案了。是的,这很麻烦,但Java就是这样。@PierreOverFlow是的,差不多就是这样。我认为您可以对这个问题的措辞有所不同(“如何在没有类型标记的情况下检索泛型参数的确切类型”或类似内容;听起来它可能与另一个问题不同,因此可能不会被复制),但是我想你可能也会给出同样的答案。虽然我同意在大多数编程环境中这是一个坏主意,但是对于api开发人员和库开发人员来说,在某些缓存场景中这是一个要求。