代码之家  ›  专栏  ›  技术社区  ›  dbyrne

多态性、自动氧化和隐式转换

  •  2
  • dbyrne  · 技术社区  · 14 年前

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

    那么scala中的隐式转换呢?

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

    我的同事不同意我的看法。谁是对的?

    2 回复  |  直到 14 年前
        1
  •  8
  •   Matthew Farwell    14 年前

    Wikipedia :

    亚型多态性,几乎 普遍称之为多态性 在面向对象的环境中 编程,是一种能力 类型,a,显示为并用作 另一种类型,B。

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

    自动氧化是创建一个对象(同样,一个转换)。

    因此,这些不是多态性。

        2
  •  1
  •   extraneon    14 年前

    我个人认为自动氧化是一种有时会产生意想不到结果的黑客行为。

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

    自动氧化的难点在于它不是一个真正的类型转换,它(只)改变类型,而更多的是一个值转换。