将 null 转换为任何类型

fer*_*hur 5 java null casting

可以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);
Run Code Online (Sandbox Code Playgroud)

我的问题是,null“可投射到任何东西”吗?

Viv*_*vin 7

来自 Java 文档:

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