Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lombok项目-值注释:是否可以抑制@Getter?_Java_Lombok - Fatal编程技术网

Java Lombok项目-值注释:是否可以抑制@Getter?

Java Lombok项目-值注释:是否可以抑制@Getter?,java,lombok,Java,Lombok,在浏览了,尤其是文档中的和注释之后,我没有找到任何抑制由@Getter生成的代码的设置 实际上,@Value是final@ToString@equalsandhascode@allargsconstuctor@FieldDefaults(makeFinal=true,level=AccessLevel.PRIVATE)@Getter的缩写 这一点很重要,因为我不想泄漏对自身可变的对象的引用 有效Java在“第39项:需要时制作防御性拷贝”中提到了此类问题。这似乎可以通过制作实际的防御性拷贝部分解

在浏览了,尤其是文档中的和注释之后,我没有找到任何抑制由
@Getter
生成的代码的设置

实际上,@Value是final@ToString@equalsandhascode@allargsconstuctor@FieldDefaults(makeFinal=true,level=AccessLevel.PRIVATE)@Getter的缩写

这一点很重要,因为我不想泄漏对自身可变的对象的引用

有效Java在“第39项:需要时制作防御性拷贝”中提到了此类问题。这似乎可以通过制作实际的防御性拷贝部分解决这个问题,但我想避免泄露属性,不管它们是可变的

虽然可以滚动自己的注释来省略,但我当然不希望这样做,因为如果已经存在这样的设置,这会给代码库增加不必要的复杂性。

您可以使用:

@价值观
@Getter(AccessLevel.NONE)


AccessLevel.NONE
指示Lombok不生成getter。这是您现在能做的最好的了。

如果您不想使用
@Getter
,您还必须省略
@Value
。。。您是否尝试使用
@ToString@equalsandhascode@allargsconstuctor@FieldDefaults(makeFinal=true,level=AccessLevel.PRIVATE)
而不使用
@Getter
?(或者用
@Setter
@Wither
代替)是的,它可以工作。只是太。。。另一方面,您的用例在某种程度上是特殊的,我认为可以将这些3-4注释放在那里。至少剩下的你不用自己写了。为什么它很特别?好。。。如果您不能真正访问其字段/值,那么半不变类型有什么帮助呢?
@Value
所做的一件事是,我不需要在实现内部散布
private final
。这不仅确保了向其他开发人员提供编译时反馈,而且简洁地注释实例不会受到不必要的干扰在语义上也是有价值的。然而,
private final
并不意味着“不可变”。因此,我想默认使用最不允许的形式,首先表示类,并仅在需要时添加可访问性。我经常看到这个特性,所以我不认为它是一个特殊的用例,但我不明白。您想要一个带有
私有final
字段但没有访问器的不可变类型吗?如果这些字段永远无法访问,它们会带来什么?还是我遗漏了什么?(如果反射是访问字段的唯一方法,那么我宁愿使用
@Value
,只在值类型中添加不可变的类型)