将null转换为任何类型

时间:2014-06-13 15:09:51

标签: java casting null

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是否可以施放任何东西?

2 个答案:

答案 0 :(得分:3)

来自Javadocs:

还有一个特殊的null类型,表达式的类型为null,没有名称。由于null类型没有名称,因此无法声明null类型的变量或转换为null类型。空引用是null类型表达式的唯一可能值。 null引用始终可以强制转换为任何引用类型。在实践中,程序员可以忽略null类型,只是假装null只是一个可以是任何引用类型的特殊文字。

答案 1 :(得分:1)

是的,两者都应该有效,但关键是你需要确保以后不要尝试引用这些字段或方法。 (至少在你将这些变量分配给别的东西之前)

所有对象都继承Object,但由于您指定为null,因此实际上不会有Object所期望的方法或字段。因此,当您尝试调用equals()时,您将收到错误,因为null没有通常从对象继承的方法。

您可以将声明的变量赋值为null,如果在if语句中定义了实际值,则可以非常有用地防止编译器错误。