空对象的Vexing对象转换错误

时间:2016-08-25 12:56:25

标签: java

我有一些构造函数代码,我将许多变量设置为null,并希望将其缩短为单个语句,但编译失败。

这是我能想到的最简单的例子:

class Bar{}
class Foo{}

class FooBar
{
    Foo foo;
    Bar bar;

    FooBar()
    {
        foo = bar = null;
    }   
}

并且编译器输出" Bar无法转换为Foo"。我不明白。这里没有物品。发生了什么事?

2 个答案:

答案 0 :(得分:3)

编译器并不关心您是否正在分配空(这不会有问题)。您尝试使用foo = bar进行非法分配,并且编译器拒绝使用它。

您正在思考"我希望FooBar类型的这些变量为空",但编译器会看到"他" s尝试将Bar分配给Foo"。

非本地对象变量的默认值是 null,所以你确定你不会尝试做一些完全没有必要的事情吗? ?

答案 1 :(得分:0)

这是一件基本的事情。如果您有2个int类型变量,则可以执行

a=b=10

这里发生的事情是10被分配给b而b的值被分配给a。

在您的情况下,foobar是不同的类型变量,null为bar分配,但bar的值无法分配给foo因为它的另一种类型。所以它会产生错误。