当引用在 Java 中为空时,我有什么替代方法可以"instanceof"?

  • 本文关键字:方法 instanceof Java 引用 java
  • 更新时间 :
  • 英文 :


我有一个方法,它接收一个可以为null的参数。我使用了instanceof来检查类型,但如果参数为null,instanceof将返回null。我已经阅读了文档,这就是instanceof的工作原理。在这种情况下,即使值为null,我也要检查传递的参数的类型。示例

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值都是不可区分的。

您可以将参数包装在泛型类型中

public class GenericClass<T> {
private final Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public Class<T> getMyType() {
return this.type;
}
}

从这个问题。

最新更新