获取通用T的类型

时间:2014-07-06 21:30:42

标签: java generics

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

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

2 个答案:

答案 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?

对于更复杂的要求,我已经好运了。