gpt4 book ai didi

java - 如果我不能更改父类,那么将公共(public)属性和方法实现放在哪里?

转载 作者:行者123 更新时间:2023-11-30 08:44:42 24 4
gpt4 key购买 nike

我正在使用 JavaFX,特别是:

  • javafx.scene.shape.Rectangle
  • javafx.scene.shape.Ellipse
  • javafx.scene.shape.Line

我需要额外的方法,所以我创建了接口(interface) MoreFunctions。我创建了三个继承自上述类并实现 MoreFunctions 的新类,即:

public class MyRectangle extends javafx.scene.shape.Rectangle implements MoreFunctions {
...
}

只要 MyRectangleMyEllipse 对附加方法有不同的实现,就可以了。 但是我应该在哪里放置具有相同实现的方法呢?我无法更改父类,因为我无法修改框架。 默认接口(interface)方法是唯一(可行)的方法吗?但是,方法所依赖的常见属性呢?

编辑:一个常用方法的例子

public void toggleSelection() {
if (!selected) {
setStrokeWidth(5);
setStroke(Color.RED);
selected = true;
}
else {
setStrokeWidth(0);
selected = false;
}
}

这需要

private boolean selected;

最佳答案

听起来有点像你在找mixin功能,doesn't really exist in Java .您也许可以 simulate mixins using Java 8 functionality或通过 special purpose 3rd party mixin support library .

但是,如果您使用传递方法或组合对象,对于其他开发人员来说事情可能会更直接一些。您的每个 Shape 子类都可以 delegate实现特定功能(例如选择切换)的通用类的功能,而不是依赖默认方法等新语言功能。

通过检查各种 JavaFX 类中选择功能的处理方式,您可以看到可继承或固有功能与委托(delegate)或组合方法的区别。 ToggleButton有一个 selectedProperty,所​​以它直接实现了选择功能。但是,ListView 有一个 selectionModelProperty ,因此 ListView 的选择建模能力被委托(delegate)给关联的类,而不是直接在 ListView 本身中实现。

当然,当您拥有像 JavaFX Controls 这样的 MVC 风格系统时,事情会变得有点复杂。 ,但您可能不需要将系统编码到那种复杂程度。不过,您可能想检查如何 CSS support is added to controls并考虑使用类似的基于 CSS 的支持来实现选定形状的样式等功能,而不是直接在代码中编写样式。

关于java - 如果我不能更改父类,那么将公共(public)属性和方法实现放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682945/

24 4 0