【问题标题】:Polymorphism, Autoboxing, and Implicit Conversions多态性、自动装箱和隐式转换
【发布时间】:2010-05-21 16:17:44
【问题描述】:

您是否认为 Java 中的自动装箱是一种多态形式?换句话说,你认为自动装箱扩展了 Java 的多态能力吗?

Scala 中的隐式转换怎么样?

我的观点是它们都是多态的例子。这两个功能都允许以统一的方式处理不同数据类型的值。

我的同事不同意我的观点。谁是对的?

【问题讨论】:

  • 也许它们是真正意义上的多态:multi (poly)-formed(morph),因为它们可以以不同的形式出现。但在编程术语中,这不是多态性……Matthieu 是对的 :)

标签: java scala polymorphism autoboxing implicit-conversion


【解决方案1】:

来自Wikipedia

亚型多态性,几乎 普遍称为多态性 在面向对象的上下文中 编程,是一个人的能力 键入 A,以显示和使用 另一种类型,B。

Scala 中的隐式转换是转换。一个对象被转换为另一个对象。

自动装箱是一个对象的创建(同样,一个转换)。

因此,这些都不是多态性。

【讨论】:

  • +1 接口不能改变,并且接口的契约被实现为多态。
【解决方案2】:

我个人认为自动装箱是一种 hack,有时会产生意想不到的结果。

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

自动装箱的棘手之处在于它并不是真正的强制转换,它(仅)改变了类型,而更多的是一种值转换。

【讨论】:

  • 您可以设置几乎任何好的 Java IDE 来突出自动拆箱的出现(自动拆箱总是安全的,您的示例是关于反向转换)。
猜你喜欢
  • 1970-01-01
  • 2010-09-19
  • 2013-07-29
  • 2013-06-11
  • 2015-03-12
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多