我正在使用JavaFx属性和Lombok
我最近开始使用Lombok,它使我的代码更简单易读,但是我遇到了JavaFx属性的问题,它没有像使用IntelliJ生成它们那样解开它们,我获得了属性本身的吸气剂和获取价值的方法。这是一个简单的示例,说明了我要做什么。
public class LombokAndProperties {
public static void main(String[] args) {
Model model = new Model();
model.getStringProperty(); // returns the StringProperty instead of String
model.stringProperty(); // doesn't exist -> doesn't compile
// Expectation:
// model.getStringProperty() <- return the String that is stringProperty.get()
// model.stringProperty() <- return the StringProperty itself
}
@Getter
private static class Model{
private StringProperty stringProperty;
}
}
我知道我可以像这样使用:model.getStringProperty().get()
来获取String
值,但是如果存在它,我更喜欢直接的方式。
对此有任何解决方案吗?
答案 0 :(得分:0)
我找到了一种方法:
public class LombokAndProperties {
public static void main(String[] args) {
Model model = new Model();
model.getStringProperty(); // <- return the String that is stringProperty.getStringProperty()
model.stringProperty(); // <- return the StringProperty itself
}
private static class Model{
private interface DelegateExample {
String getStringProperty();
}
@Accessors(fluent = true)
@Getter
@Delegate(types = DelegateExample.class)
private StringProperty stringProperty = new StringProperty();
}
private static class StringProperty {
String property = "p";
public String getStringProperty(){
return property;
}
}
}
使用@Accessor
批注,您可以操纵您的吸气剂名称,而@Delegate
则为您提供委托模式。您可以找到更多的here和here。但是请注意两件事:首先,这些标注被Lombok团队标记为“实验性”。其次,对我来说,这是一个相当混乱的API,因此请谨慎使用。
如果此解决方案太复杂,我建议仅采用@Accessor
并创建自己的委托方法:
public class LombokAndProperties {
public static void main(String[] args) {
Model model = new Model();
model.getStringProperty(); // <- return the String that is stringProperty.get()
model.stringProperty(); // <- return the StringProperty itself
}
private static class Model{
@Accessors(fluent = true)
@Getter
private StringProperty stringProperty;
public String getStringProperty(){
return stringProperty.get();
}
}
}