我如何检查变量是否是“类”引用

时间:2014-02-05 09:06:38

标签: java

如何检查给定变量是否为Class(通用类型)?我真的不知道如何更好地提出问题,但让我们考虑一下这段代码:

Object[] o = new Object[] { "string", 12, MyClass.class, new MyClass() };

for (int i = 0; i < o.length; i++) {
    if (o[i] instanceof String) ...       // TRUE for [0]
    else if (o[i] instanceof Integer) ... // TRUE for [1]
    else if (o[i] instanceof ???) ...     // TRUE for [2] ???
    else if (o[i] instanceof MyClass) ... // TRUE for [3]
    else ...
}

如何检查o数组的第三个元素的类型?

4 个答案:

答案 0 :(得分:10)

使用instanceof来测试它是否是一个类(任何类型):

if (o[i] instanceof Class)

使用==来测试它是否是特定类:

if (o[i] == MyClass.class)

类文字实际上是静态常量,因此每个JVM只有一个类文字。


注意:如果有多个类加载器正在运行,那么==的测试可能是假的,即使它“应该”为真如果两个实例是使用不同的类加载器加载的。在这种情况下,即使o[i].equals(MyClass.class)也是错误的。

答案 1 :(得分:3)

instanceOf运算符

一样使用
o[i] instanceof Class

答案 2 :(得分:1)

else if (o[i] instanceof Class) ...

与检查IntegerString的方式完全相同。如果要使用泛型类型参数,则必须是?通配符:

else if (o[i] instanceof Class<?>) ...

由于通用信息在运行时被删除,并且您似乎无法测试它是否是特定类。

答案 3 :(得分:1)

MyClass.class是Class类型的文字,因此Class的实例应该这样做。