我是lombok的新手,并对为什么以下代码编译时没有任何错误感到困惑。既然我已将Setter指定为具有AccessLevel.PROTECTED,那么应该不会出现某种编译错误?

AnotherClass.java

@NoArgsConstructor
@AllArgsConstructor
public class AnotherClass {

    @Getter @Setter
    private int width;

    @Getter(AccessLevel.PUBLIC) @Setter(AccessLevel.PROTECTED)
    private int height;

    @Getter @Setter @NonNull
    private String name;
}


Main.java

public static void main(String[] args) {
    AnotherClass instance1 = new AnotherClass(2, 1, "instance1");
    System.out.println("Fetching height of instance1: " + instance1.getHeight());
    instance1.setHeight(3);
    System.out.println("Fetching height of instance1: " + instance1.getHeight());
}


输出:

Fetching height of instance1: 1
Fetching height of instance1: 3

最佳答案

您可以使用delombok来检查生成的二传手确实受到“保护”。如注释所示,java的访问级别是严格的提升;每个允许的级别都包括其下的所有访问权限。从而:


private =或多或少:此文件中的所有代码。
无(包私有)=所有private +同一包中的所有源代码。
protected =以上所有+子类,即使在另一个包中也是如此。
public =一切。


免责声明:我是lombok开发人员。

10-06 09:33