2016-08-25 4 views
0

У меня есть код-конструктор, в котором я установил множество переменных в null и хотел сократить его до одного оператора, но компиляция завершилась неудачно.Ошибка преобразования Vexing объекта для нулевых объектов

Вот самый простой пример, который я могу думать:

class Bar{} 
class Foo{} 

class FooBar 
{ 
    Foo foo; 
    Bar bar; 

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

и выходы компилятора «Bar не может быть преобразован в Foo». Этого я не понимаю. Здесь нет объектов. Что происходит?

+0

Прошу прощения, если этот вопрос каким-то образом написан правильно. Возможно, вы могли бы объяснить мне, что с ним не так. Большое спасибо, –

+1

Установка переменных в 'null' в конструкторе не требуется. Они уже «нуль». – Kayaman

+0

Независимо от того, что компилятор говорит «a = b = something», это плохой стиль в Java. Только не делай этого. –

ответ

3

Компилятору все равно, что вы назначаете нуль (что не будет проблемой). Вы пытаетесь сделать незаконное назначение с foo = bar, и компилятор отказывается пройти с ним.

Вы думаете: «Я хочу, чтобы эти переменные типа Foo и Bar быть нулевым», но компилятор видит «Он пытается присвоить Bar к Foo».

Также значение по умолчанию для нелокальных переменных объекта являетсяnull, поэтому вы уверены, что вы не пытаетесь сделать что-нибудь совершенно ненужное в любом случае?

0

Это основная вещь. Если у вас есть 2 переменные int типа, то вы можете сделать

a=b=10 

Что здесь происходит, 10 назначается б и величиной Ь присваивается а.

В вашем случае вы foo и bar различные переменные типа, нуль присваивается bar но значение bar не могут быть отнесены к foo, потому что его другого типа. поэтому он будет генерировать ошибку.

Смежные вопросы