java - Java:Lombok 和展开属性
问题描述
我正在使用 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;
}
}
我知道我可以使用 like:model.getStringProperty().get()
来获取String
价值,但如果它存在,我更喜欢直接的方式。
是否存在任何解决方案?
解决方案
我找到了一种方法:
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
注释,您可以操纵您的 getter 名称,同时@Delegate
为您提供委托模式。你可以在这里和这里找到更多。但是请注意两件事:首先,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();
}
}
}
推荐阅读
- python - python2 与 python3 中 file.read() 的行为
- sql-server - 如何在sql server中删除一个月中的星期六和星期日
- java - 如何对多个 java 文件使用相同的 UI?安卓 JAVA
- swiftui - SwiftUI - 带有私有变量的 PreviewProvider
- rpa - UiPath 搜索亚马逊中不可用的项目并显示未找到的项目
- android-studio - 使用 3rd 方库将表情符号添加到我的 android 自定义键盘
- api - 新 API 版本的标准
- spring-boot - 执行服务时假装客户端异常中的多个@RequestBody
- angular - 如何在 ng2-date-picker 中打开图标单击角度?
- html - display:none 在移动设备上无法正常工作