在《Effective Java》的第93-4页上,我遇到了术语“mixin”。但是我发现很难想象出mixin实际上是什么。请问有人可以通过在Java中提供mixin的示例来帮助我吗?
本质上,抽象类和接口中指定功能的主要区别之一在于,接口版本可以在许多不同的类层次结构中使用,而抽象类只能在一个类层次结构树中使用,因为Java只允许单继承。
Traversable
的混合类,其中包含一个抽象方法 forEach
和10个基于它提供功能的具体方法(如 drop
、take
、filter
、map
等等)。使用接口,您可以声明所有这些方法,但实现此接口的任何类都必须为所有方法提供实现,而不仅仅是其中一个。抽象类在这方面非常适用,但它们只能作为类的一个父类,并将您置于特定的继承层次结构中,而不是混合类。 - RokL在Java中,不存在Mix-in的概念,因为没有办法将一段代码添加到不同层次结构的类中。要实现这一点,需要多重继承或至少使用Scala类型特质。
interface IMyInterface
{
public void doStuff();
}
class MyClass implements IMyInterface
{
public void doStuff(){};
}
abstract class AbstractMixInProvider
{
public abstract void doMixinStuff();
}
我们从AbstractMixInProvider扩展了MyClass:
class MyClass extends AbstractMixInProvider implements IMyInterface
{
public void doStuff(){};
public void doMixinStuff();
}
但是,正如我之前提到的那样,试图将mix-in概念引入Java看起来很丑陋,因为这只是在玩文字游戏。