null
可以投放到任何类型吗?即以下代码将起作用
public <T> T foo(Object object){
return (T) object;
}
Duck duck = foo(new Duck()); // this works
Duck duck2 = foo(null); // should this work?
Cat cat = foo(null); // should this work?
// if they are both null, should this be true?
boolean equality = duck2.equals(cat);
我的问题是,null
是否可以施放任何东西?
答案 0 :(得分:3)
来自Javadocs:
还有一个特殊的null类型,表达式的类型为null,没有名称。由于null类型没有名称,因此无法声明null类型的变量或转换为null类型。空引用是null类型表达式的唯一可能值。 null引用始终可以强制转换为任何引用类型。在实践中,程序员可以忽略null类型,只是假装null只是一个可以是任何引用类型的特殊文字。
答案 1 :(得分:1)
是的,两者都应该有效,但关键是你需要确保以后不要尝试引用这些字段或方法。 (至少在你将这些变量分配给别的东西之前)
所有对象都继承Object
,但由于您指定为null,因此实际上不会有Object
所期望的方法或字段。因此,当您尝试调用equals()
时,您将收到错误,因为null没有通常从对象继承的方法。
您可以将声明的变量赋值为null,如果在if
语句中定义了实际值,则可以非常有用地防止编译器错误。