如何仅针对一个非最终字段实例关闭getter / setter? [龙目岛项目]

时间:2016-06-15 19:53:18

标签: java setter getter lombok

public @Data class Person { ... }

据我所知,当我使用@Data注释标记一个类时,Lombok将为所有字段提供getter,为所有非final字段提供setter。我想关闭一个实例非最终字段的getter和setter ,我该如何实现?

我期待什么?要找到像

这样的注释
@Setter(provide=false)
@Getter(provide=false)
private Map<...> dialogs;

@Data(excludeFields={"dialogs"})

我搜索了很多并在官方网站上查找,但我一无所获 我们将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:4)

您可以按the website上的说明在字段上使用@Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE)

披露:我是龙目岛的开发者。

答案 1 :(得分:3)

我不知道如何防止为特定字段生成Getter / Setter,但是,有一种技巧使得访问者在类外部不可见。

@Data
public class Person {
    private String name;
    private int age;
    @Getter(AccessLevel.PRIVATE) @Setter(AccessLevel.PRIVATE)
    private Map<String, String> dialog;
}

使用AccessLevel.PRIVATE dialog的Getter / Setter将不会在课外看到,这类似于该类没有该字段的访问者。

修改

正如@Roel_Spilker所提到的,有一种方法可以禁用getter / setter生成。 webpage for Getter/Setter说:

  

您可以使用特殊的 AccessLevel.NONE 访问级别,始终为任何字段手动停用getter / setter生成。这样,您就可以覆盖类上@Getter@Setter@Data注释的行为。

因此,您应该使用@Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE)而不是将其设为私有。