java获取泛型T的类型
C#允许使用typeof(T)
方法获取泛型参数的类型,而无需实例化T
参数。但是在Java中,任何时候我都有泛型T
参数,我想确定我必须创建该参数的实例的类型,例如通过使用Class<T> Type
来确定它是什么类型
与C#提供的方法相比,Java中的这种方法看起来不必要地冗长和复杂。
我想知道在不需要实例化泛型参数(例如if (T is Integer)
)的情况下,确定泛型参数类型的最佳选择是什么
你可以在下面搜索框中键入要查询的问题!
C#允许使用typeof(T)
方法获取泛型参数的类型,而无需实例化T
参数。但是在Java中,任何时候我都有泛型T
参数,我想确定我必须创建该参数的实例的类型,例如通过使用Class<T> Type
来确定它是什么类型
与C#提供的方法相比,Java中的这种方法看起来不必要地冗长和复杂。
我想知道在不需要实例化泛型参数(例如if (T is Integer)
)的情况下,确定泛型参数类型的最佳选择是什么
# 1 楼答案
Java中的泛型是一种编译时特性——因此Java和C#之间不匹配。因此,除非向您传递了该类型的对象,或者您自己创建了一个对象,或者实际上以其他方式告诉了类,否则您无法在运行时执行任何操作来确定该类型
人们普遍认为,甚至尝试寻找类型都是一个坏主意。它通常表示您没有正确设计类层次结构
# 2 楼答案
泛型在编译时是真的。。。但是你可以给编译器提示t到底是什么
通过传入T的实际运行时类,您可以允许编译器允许您了解T所代表的类的运行时知识
例如:
这个问题的答案有点明确了参数化类型的限制:
Java: How do I specify a class of a class method argument?
如果您只是试图从子类获取信息。。。您可以在此问题上尝试使用参数化类型的反射:
How to determine the class of a generic type?
对于更复杂的需求,我很幸运