我们都知道Java为什么/应该没有多重继承。因此,这并不是对直到牛群到家的争论。
这讨论了当我们希望创建一个具有两个或多个其他类特征的类时该怎么做。
大概,我们大多数人都会这样做以从三个类别“继承”。为了简单起见,我省略了构造函数。
class Car
extends Vehicle
{
final public Transport transport;
final public Machine machine;
}
因此,Car类直接继承了Vehicle类的方法和对象,但必须显式地引用transport和machine才能引用在Transport and 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'/>
会寻找方法
setAmphibious(..),setFootPrint(..)和setModel(..)。因此,我必须从Transport和Machine类中投影方法
class Car
extends Vehicle
{
final public Transport transport;
final public Machine machine;
public void setAmphibious(boolean b){
this.transport.setAmphibious(b);
}
public void setFootPrint(String fp){
this.machine.setFootPrint(fp);
}
}
如果只有几个特征,那就可以了。现在,我正在尝试将所有SmartGWT都适配到GWT UIBinder中,尤其是那些不是GWT小部件的类。有很多特征可以预测。
如果存在某种形式的注释框架,那就不是很好吗:
class Car
extends Vehicle
@projects {Transport @projects{Machine @projects Guzzler}}
{
/* No need to explicitly instantiate Transport, Machine or Guzzler */
....
}
如果存在通用的特性名称,则机器的特性将优先于Guzzler,运输的优先于机器,车辆的优先于运输。然后,注释框架将实例化Transport,Machine和Guzzler作为Car的隐藏成员,并按@project注释序列所指定的优先级进行扩展,以将受保护/公共特征分解为实际源代码或字节代码。最好转换成字节码。因此,可以在Machine和Guzzler中找到setFootPrint方法,仅投影Machine的方法。
问题:
您不认为拥有这样的框架是一个好主意吗?
这样的框架已经存在了吗?告诉我在哪里。
有没有做过的eclipse插件?
您是否知道关于此类注释框架的任何提议或计划?
如果注解/插件框架允许我指定boolean,int或需要从String转换的其他内容,并且也为我执行转换/解析,那也将是很棒的。
请告知,有人。我希望我的问题的措词足够清楚。谢谢。
编辑:
为避免面向对象的狂热者下结论,我已重命名了该问题的标题。
最佳答案
也许不完全是您想要的,但是您可以看看Mixins:
the wikipedia article
Qi4j framework
CGLIB的mixin support
this example