当Java中的引用为空时,“instanceof”的替代方法是什么?
我有一个方法可以接收一个可以为空的参数。我曾经instanceof检查过类型,但如果参数为空,则instanceof返回空。我已经阅读了文档,它是如何instanceof工作的。在这种情况下,即使值为空,我也想检查传递参数的类型。例子
public static void checkType(Object yourObject) {
if(yourObject instanceof String) { // this fails if null passed, even if declared as String
print("You have passed a String");
}
}
在这些情况下我能做什么?
我的目标是:
String myvar = null;
checkType(myvar);
会打印:
“你传递了一个字符串”
回答
假设您的目标是拥有此代码,其输出如注释中所示:
String s = null;
Integer i = null;
checkType(s); // prints "String"
checkType(i); // prints "Integer"
那么这是不可能的,除非 的两次调用checkType实际上调用了具有相同名称的不同方法,即重载:
static void checkType(String s) {
System.out.println("String");
}
static void checkType(Integer i) {
System.out.println("Integer");
}
不过,这似乎不是很有用,因为该方法实际上并没有检查类型;编译器正在检查类型并调用适当的重载。使用单个方法执行运行时类型检查无法获得相同的结果,因为该值null在运行时不携带您想要的信息;没有不同的“风味” null,所有null值都无法区分。