2015-12-31 4 views
-4

Посмотрите на приведенный ниже кодAutoBoxing/Unboxing не работает с типами возврата?

public class Parent { 
    public Object doSomething() { 
     return null; 
    } 
} 

class Child extends Parent { 
    public Integer doSomething() { 
     return 0; 
    } 
} 

, который идеально подходит под ковариации и компилирует прекрасно.

Где, как

public class Parent { 
    public Integer doSomething() { 
     return null; 
    } 
} 

class Child extends Parent { 
    public int doSomething() { 
     return 0; 
    } 
} 

Не компиляции. Но он может легко трансформироваться под автобоксинг и распаковку?

+1

Несколько похожи: [В Java, можно переопределить методы, если возвращаемые типы соответственно примитив и класс оболочки?] (http://stackoverflow.com/questions/27701092/in-java-is-it-possible-to-override-methods-if-return-types-are-respectively-ap) –

+0

@RahulTripathi Хм .. Меня вдохновил мой ранее ответ на вопрос :). Пробовал удалить, и я не могу удалить. Отметьте его как дубликат :) –

ответ

1

В своем первом случае, код компилируется, потому что Java поддерживает Covariance, что означает,

Если Кошка Подтип животных, то выражение типа Cat может использоваться всякий раз, когда выражение типа Animal мог.

В соответствии с этим первый случай в порядке.

Coming ко второму случаю,

Autoboxing является автоматическое преобразование, что компилятор Java делает между примитивными типами и их соответствующий объект класса-оболочки. Например, преобразование int в Integer, double в Double и т. Д.

Это прямая связь между оболочкой и примитивно, что вовсе не означает, что int является подклассом Integer

int ---> Integer //conversion, not subtype 
Смежные вопросы