【问题标题】:Java: Mixin implementation classesJava:混合实现类
【发布时间】:2018-05-01 00:24:06
【问题描述】:

我在几个名为 Mixin 的代码库类中看到了带有 cmets 的类,例如:

//Mixin style implementation
public class DetachableMixin implements Detachable {}

这种实现方式下的概念是什么?

【问题讨论】:

  • 我注意到你的问题仍然是“开放的”——因为你没有接受答案。请查看并决定是否要accept 回答。或者让我知道我是否可以做些什么来增强我的输入以使其被接受。接受有助于未来的读者确定问题是否已解决,并对花时间回答你的人表示感谢。谢谢!

标签: java mixins


【解决方案1】:

这是来自 Joshua Bloch “Efective Java”的引用(我不认为,我自己可以更好地解释它):

接口是定义 mixin 的理想选择。简单地说,mixin 是一种类型 一个类可以实现除了它的“主要类型”来声明它提供 一些可选的行为。例如,Comparable 是一个 mixin 接口, 允许一个类声明它的实例是相对于其他相互排序的 可比较的对象。这样的接口称为 mixin,因为它允许 可选功能“混合”到类型的主要功能中。 抽象类不能用于定义 mixin,原因与它们不能 改装到现有班级:一个班级不能有多个父级,并且 在类层次结构中没有合理的位置可以插入 mixin。

【讨论】:

    【解决方案2】:

    另一个答案是正确的,但值得指出的是,其他 JVM 语言走得更远。

    Scala 的例子有traits - 基本上是方法实现的“接口”。在 scala 中,您可以将一个类与多个特征混合,从而允许从几个不同的“地方”继承 行为

    与 Java 8 中采用的基本相同的概念,您知道可以将 default 方法行为添加到接口。记录一下:如果我没记错的话,Java8 接口和默认方法不是旨在在 Java 语言中引入完整的“混合”概念。想法是您应该使用此功能通过后门实现多重继承。请参阅来自 Stuart Mark 的冗长的answer,他是推动 Java 语言发展的人之一。他们说:

    默认方法的目的......是使接口在初始发布后以兼容的方式发展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-23
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多