2010-05-21 7 views
2

Вы считаете, что автобоксинг в Java является формой полиморфизма? По-другому, считаете ли вы, что autoboxing расширяет полиморфные возможности Java?Полиморфизм, автобоксинг и неявные преобразования

Как насчет неявных преобразований в Scala?

Мое мнение, что они оба являются примерами полиморфизма. Обе функции позволяют обрабатывать значения разных типов данных единообразно.

Мой коллега не согласен со мной. Кто прав?

+0

Возможно, они являются полиморфными в реальном смысле слова: multi (poly) -formed (morph), поскольку они могут появляться в разных формах. Но в терминах программирования это не полиморфизм ... Matthieu прав :) – Simon

ответ

7

От Wikipedia:

подтип полиморфизм, почти повсеместно называют просто полиморфизм в контексте объектно-ориентированного программирования, является способность одного типа, А, чтобы выглядеть и использоваться как другой тип, B.

Неявные преобразования в Scala являются преобразованиями. Один объект преобразуется в другой объект.

Autoboxing - это создание объекта (опять же преобразование).

Следовательно, это не полиморфизм.

+1

+1 Интерфейс не должен меняться, а контракты интерфейса выполнены полиморфными. –

1

Я лично считаю autoboxing как своего рода взломать иногда неожиданные результаты.

Boolean b = null; 
boolean b2 = b; // oops 

Хитрая часть Autoboxing является то, что это на самом деле не литая, которые (только) изменяет тип, но больше преобразования значения.

+1

Вы можете настроить практически любую хорошую Java IDE, чтобы выделить случаи автоматического распаковки (автообновление всегда безопасно, ваш пример касается обратного преобразования). –