Полиморфизм, автоупаковка и неявные преобразования

Считаете ли вы автоупаковку в Java формой полиморфизма? Иными словами, думаете ли вы, что автоупаковка расширяет полиморфные возможности Java?

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

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

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


person dbyrne    schedule 21.05.2010    source источник
comment
Возможно, они полиморфны в прямом смысле этого слова: мульти (поли)формы (морфы), так как могут проявляться в разных формах. Но с точки зрения программирования это не полиморфизм... Матье прав :)   -  person Simon    schedule 21.05.2010


Ответы (2)


Из Википедии:

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

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

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

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

person Matthew Farwell    schedule 21.05.2010
comment
+1 Интерфейс не должен меняться, а контракты интерфейса должны выполняться, чтобы быть полиморфным. - person Thomas Jung; 21.05.2010

Лично я считаю автобокс чем-то вроде хака с неожиданными результатами.

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

Сложность автоупаковки заключается в том, что на самом деле это не преобразование, которое (только) изменяет тип, а скорее преобразование значения.

person extraneon    schedule 21.05.2010
comment
Вы можете настроить почти любую хорошую Java IDE, чтобы выделить случаи автоматической распаковки (автоупаковка всегда безопасна, ваш пример касается обратного преобразования). - person quant_dev; 22.05.2010