gpt4 book ai didi

api - JavaFX 用简单属性包装现有对象

转载 作者:行者123 更新时间:2023-12-04 13:43:15 25 4
gpt4 key购买 nike

我正在编写一个新应用程序,为了灵活性我选择使用 Java。它是一个 GUI 应用程序,所以我将使用 JavaFX。这是我第一次使用 Java,但我有使用 C# 的经验。

我正在熟悉 JavaFX 属性,它们看起来像是前端和后端之间双向绑定(bind)的好方法。

我的代码使用开源 API 中的类,我想将这些类的成员转换为 JavaFX 属性(String => StringProperty 等)。我相信这对于引用这些成员的任何对象都是透明的。

这样做可以吗?这是处理现有类的建议方法吗?对于枚举类型我该怎么办?例如。枚举成员的值发生了变化,我应该如何将枚举成员连接到前端?

谢谢:)

最佳答案

一般来说,只要您不更改类的公共(public) API - 换句话说,您不删除任何公共(public)方法,修改其参数类型或返回类型,或更改其功能 - 您就不应该破坏使用它们的任何代码。

所以,例如更改自

public class Foo {

private String bar ;

public String getBar() {
return bar ;
}

public void setBar(String bar) {
this.bar = bar ;
}
}

public class Foo {
private final StringProperty bar = new SimpleStringProperty();

public StringProperty barProperty() {
return bar ;
}

public String getBar() {
return barProperty().get();
}

public void setBar(String bar) {
barProperty().set(bar);
}
}

不应破坏该类 Foo 的任何客户端。唯一可能的问题是子类 Foo 的类并被覆盖getBar()和/或setBar(...)如果它们的父类(super class)被新的实现替换,可能会出现意外的行为(具体来说,如果 getBar()setBar(...) 不是最终的,则您无法强制执行 getBar()==barProperty().get() ,这是可取的)。

对于枚举(和其他对象),您可以使用 ObjectProperty<> :

给定

public enum Option { FIRST_CHOICE, SECOND_CHOICE, THIRD_CHOICE }

然后你就可以了

public class Foo {

private final ObjectProperty<Option> option = new SimpleObjectProperty<>();

public ObjectProperty<Option> optionProperty() {
return option ;
}

public Option getOption() {
return optionProperty().get();
}

public void setOption(Option choice) {
optionProperty().set(choice);
}
}

对所有这些的一个警告是,您确实引入了对 JavaFX API 的依赖关系,而这些依赖关系以前并不存在于这些类中。 JavaFX 随 Oracle JDK 一起提供,但它不是 JSE 的完整部分(例如,默认情况下它不包含在 OpenJDK 中,也不包含在其他一些 JSE 实现中)。因此,在实践中,您不太可能说服开源库的开发人员接受您对库中的类的更改。由于它是开源的,您当然可以使用 JavaFX 属性维护自己的库分支,但是如果您想合并该库的新版本,就会变得很棘手(本质上,您将需要合并两组不同的更改) .

另一个选择是在类中使用绑定(bind)属性,并使用 Java Bean 属性适配器包装它们。 this question 中对此进行了描述。 .

关于api - JavaFX 用简单属性包装现有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35219394/

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