Lombok:非子类不应该不能访问受保护的设置器吗?
Lombok: Shouldn't protected setters not be accessible by non-subclasses?
我是 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
检查生成的 setter 是否确实是 'protected'。如评论所示,java 的访问级别是严格提升;每一个更宽松的级别都包括所有访问权限 'below' 它。因此:
private
= 或多或少:此文件中的所有代码。
- 无(包私有)= 所有
private
+ 同一包中的所有源代码。
protected
= 以上所有 + 子类,甚至在另一个包中。
public
= 一切。
免责声明:我是 lombok 开发人员。
我是 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
检查生成的 setter 是否确实是 'protected'。如评论所示,java 的访问级别是严格提升;每一个更宽松的级别都包括所有访问权限 'below' 它。因此:
private
= 或多或少:此文件中的所有代码。- 无(包私有)= 所有
private
+ 同一包中的所有源代码。 protected
= 以上所有 + 子类,甚至在另一个包中。public
= 一切。
免责声明:我是 lombok 开发人员。