如何检查给定变量是否为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
数组的第三个元素的类型?
答案 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) ...
与检查Integer
或String
的方式完全相同。如果要使用泛型类型参数,则必须是?
通配符:
else if (o[i] instanceof Class<?>) ...
由于通用信息在运行时被删除,并且您似乎无法测试它是否是特定类。
答案 3 :(得分:1)
MyClass.class是Class类型的文字,因此Class的实例应该这样做。