当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值都无法区分。


以上是当Java中的引用为空时,“instanceof”的替代方法是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>