C#允许使用typeof(T)
方法获取通用参数的类型,而无需实例化T
参数。但是在Java中我随时都有通用T
参数,我想确定我必须创建该参数实例的类型,例如使用Class<T> Type
来确定它是什么类型。
与C#提供的相比,Java中的这种方法看起来不必要地冗长和复杂。
我想知道什么是确定泛型参数类型的最佳替代方法,而无需实例化(例如if (T is Integer)
)。
答案 0 :(得分:4)
Java中的泛型是一个编译时功能 - 因此Java和C#之间不匹配。因此,您无法在运行时执行任何操作来确定类型,除非您要么传递该类型的对象,要么自己创建一个对象,或者以其他方式实际告诉该类。
通常认为即使尝试找到类型也是一个坏主意。它通常表示您没有正确设计类层次结构。
答案 1 :(得分:0)
泛型是编译时真的......但是你可以给编译器提供真实的提示。
通过传入T实际的运行时类,允许编译器允许运行时知道T代表的类。
示例:
public <T> boolean isObjectT(Class<T> type, Object object){
return object.getClass().isAssignableFrom(type);
}
这个问题的答案有点说明了参数化类型的限制:
Java: How do I specify a class of a class method argument?
如果您只是想从子类中获取信息......您可以在这个问题上尝试使用参数化类型的反射:
How to determine the class of a generic type?
对于更复杂的要求,我已经好运了。