gpt4 book ai didi

Java 多类组合和样板减少

转载 作者:行者123 更新时间:2023-12-01 17:39:53 26 4
gpt4 key购买 nike

我们都知道为什么 Java 具有/不应该具有多重继承。因此,这并不是对已经争论过的问题提出质疑,直到奶牛回家为止。

这讨论了当我们希望创建一个具有两个或多个其他类的特征的类时我们会做什么。

我们大多数人可能会这样做是为了“继承”三个类。为了简单起见,我省略了构造函数。:

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'/>

会寻找方法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 注释序列规定的优先级扩展以分解 protected /公共(public)特征,将其分解为实际源代码或字节代码。最好是字节码。这样,Machine 和 Guzzler 中都可以找到 setFootPrint 方法,只有 Machine 的方法会被投影。

问题:

  1. 您不认为拥有这样一个框架是个好主意吗?
  2. 这样的框架已经存在吗?告诉我在哪里/做什么。
  3. 有没有 Eclipse 插件可以做到这一点?
  4. 您知道有关于此类注释框架的提案或计划吗?

如果注释/插件框架允许我指定 boolean 值、int 或任何其他需要从字符串转换的值,并为我进行转换/解析,那就太好了。

请有人指教。我希望我的问题的措辞足够清楚。谢谢。

编辑:为了避免OO爱好者草率下结论,我重新命名了这个问题的标题。

最佳答案

也许不完全是你正在寻找的东西,但你可以看看 Mixins:

关于Java 多类组合和样板减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com