java - 如何在 lombok 中使用 Singular 属性添加
问题描述
如何@Singular
在龙目岛添加使用属性
Foo foo = ..;
FooActivity fa = ..;
foo.fooActivity(fa); // this fails - compilation error
@Builder
class Foo {
@Singular("fooActivity")
private List<FooActivity> fooActivities;
}
解决方案
@Singular
@Builder
与注解一起使用。所以在这种情况下fooActivity
,将元素添加到列表的方法是在FooBuilder
lombok 生成的类中创建的,它不是Foo
. 因此,您无法fooActivity
使用该Foo
对象进行访问。
怎么解决?(这种方法有一个问题,我在最后提到过。)
您可以通过将注释toBuilder
设置为来解决此问题。这将生成一个方法,该方法将返回一个构建器对象,您可以使用它来调用.true
@Builder
Foo
fooActivity
@Builder(toBuilder = true)
public class Foo {
@Singular("fooActivity")
private List<FooActivity> acts;
}
// To invoke
foo = foo.toBuilder().fooActivity(fa).build();
上述方法的问题
toBuilder()
将使用 in 的值生成一个构建器,foo
并且build
将生成一个NEW对象。所以你需要小心这一点,因为原始对象foo
不是使用这种方法更新的对象。
第二种方法(不推荐)
使用实验功能@Delegate
。Lombok网站对此功能的描述如下:
目前我们认为该功能不会很快退出实验状态,如果将来的 javac 或 ecj 版本难以继续维护该功能,则可能会放弃对该功能的支持。
当您的班级中有多个集合时,它也会导致问题。
@Builder
public class Foo {
@Delegate
@Builder.Default
private List<FooActivity> acts = new ArrayList<>(); // make sure you do this while using @Delegate
}
调用
foo.add(fa);
推荐阅读
- c++ - 将从二进制文件读取的字符串转换为整数
- android - Kotlin BottomNavigationView.selectedItemId 触发 OnBackStackChangedListener
- powershell - PowerShell 将文本作为表/列输出到文件
- python - 如何将这个简单的输入 python 代码翻译成飞镖?
- python - 在 ModelIndex 下定位 QDialog 点击
- c# - 如何将文本文件转换为按提示拆分的二维数组,并使用此符号“-”提示?
- swift - swift 4 Codable - 如果有字符串或字典,如何解码?
- python - 与班级的骰子游戏
- python - NameError: name '' 不是仅在调试模式下定义的
- git - 如何避免 gitlab 显示合并更改?