Java多类合成与锅炉板简化
我们都知道为什么Java不应该有多重继承。因此,这不是质疑在奶牛回家之前已经争论过的问题 本文讨论了当我们希望创建一个具有两个或多个其他类特征的类时,我们将做什么 也许,我们大多数人这样做是为了“继承”三个类。为简单起见,我省略了构造函数:Java多类合成与锅炉板简化,java,eclipse-plugin,multiple-inheritance,annotations,Java,Eclipse Plugin,Multiple Inheritance,Annotations,我们都知道为什么Java不应该有多重继承。因此,这不是质疑在奶牛回家之前已经争论过的问题 本文讨论了当我们希望创建一个具有两个或多个其他类特征的类时,我们将做什么 也许,我们大多数人这样做是为了“继承”三个类。为简单起见,我省略了构造函数: class Car extends Vehicle { final public Transport transport; final public Machine machine; } 所以,Car类直接继承Vehicle类的方法和对象,但必须显
class Car
extends Vehicle
{
final public Transport transport;
final public Machine machine;
}
所以,Car类直接继承Vehicle类的方法和对象,但必须显式地引用transport和machine以引用transport和machine中实例化的对象
Car car = new Car();
car.drive(); // from Vehicle
car.transport.isAmphibious(); // from Transport
car.machine.getCO2Footprint(); // from Machine
在遇到需要setter和getter方法的框架之前,我一直认为这是一个好主意。例如,XML
<Car amphibious='false' footPrint='1000' model='Fordstatic999'/>
如果只有几个特征,这是可以的。现在,我正在尝试将所有SmartGWT改编成GWT UIBinder,特别是那些不是GWT小部件的类。项目有很多特点
如果存在某种形式的注释框架,不是很好吗
class Car
extends Vehicle
@projects {Transport @projects{Machine @projects Guzzler}}
{
/* No need to explicitly instantiate Transport, Machine or Guzzler */
....
}
如果存在共同的特性名称,则机器的特性优先于车辆的特性,运输的特性优先于机器的特性,车辆的特性优先于运输的特性。然后,注释框架将Transport、Machine和Guzzler实例化为Car的隐藏成员,并进行扩展,以按照@project注释序列指定的优先级,将受保护/公共特征分解为实际的源代码或字节代码。最好转换成字节码。因此,setFootPrint方法可以在机器和Guzzler中找到,只有机器的方法会被投影
问题:
为了避免OO爱好者急于下结论,我将这个问题的标题重新命名。也许不完全是您想要的,但您可以看看mixin:
- CGLIB的
- CGLIB的
<property name="transport.amphibious" value="true" />
您应该看看是否可以使用这些选项。一些框架(至少是Spring)支持为setter和getter指定路径。所以二传手看起来更像
<property name="transport.amphibious" value="true" />
你应该看看你是否可以利用这些选项。如果你在你的环境中有一些自由,一定要看看。它有助于你干净地解决这个问题,并且提供了比继承更好的代码重用策略
回到JavaLand,您可以使用AspectJ来实现。还有一个非常好的Eclipse插件:。如果您在环境中有一些自由,一定要看看。它有助于你干净地解决这个问题,并且提供了比继承更好的代码重用策略
回到JavaLand,您可以使用AspectJ来实现。还有一个非常好的Eclipse插件:。这不是一个真正的问题,而是一个开始讨论的尝试。把这当作一个问题,我的答案是1)不,2)阿福不,3)阿福不,4)阿福不。我不会从一门课延伸到其他课,然后用作文。如果您需要polymorhpism,请创建三个接口并实现其中的三个接口,然后使用Vehicle类使其成为抽象(或非抽象)的Vehicle,并使用composition访问其方法。你为什么选择车辆而不是机器或交通工具来继承?这样,您只能执行以下操作:List=new ArrayList();add(new Car())我认为需要这样一个框架是一个糟糕的类设计。也许你使用的框架你想适应一个错误的方式?尝试使用更多的接口:)我认为OO设计爱好者,包括我自己,在阅读关于多重继承的问题时,通常会得出结论并投票否决。请深入阅读我的问题和博兹霍发布的答案。它是关于合成多个类的特征,而不是表示接口。可能是我的标题写错了,应该省略了令人恼火的“多重继承”,而将问题命名为“类合成bean”。你的问题很有道理。我在野外也遇到过这样的问题,Java并没有很好地解决这些问题。这不是一个真正的问题,而是一种开始讨论的尝试。把这当作一个问题,我的答案是1)不,2)阿福不,3)阿福不,4)阿福不。我不会从一门课延伸到其他课,然后用作文。如果您需要polymorhpism,请创建三个接口并实现其中的三个接口,然后使用Vehicle类使其成为抽象(或非抽象)的Vehicle,并使用composition访问其方法。你为什么选择车辆而不是机器或交通工具来继承?这样,您只能执行以下操作:List=new ArrayList();add(new Car())我认为需要这样一个框架是一个糟糕的类设计。也许你使用的框架你想适应一个错误的方式?尝试使用更多的界面:)我认为OO设计爱好者,包括我自己,在阅读关于多个继承的问题时通常会得出结论