- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的代码如下
package test.lombok;
import lombok.*;
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class SuperClass {
private int foo;
@Getter
public static class SubClass extends SuperClass {
private int bar;
@Builder(toBuilder = true)
private SubClass(int foo, int bar) {
super(foo);
this.bar = bar;
}
}
}
如上所示,我正在尝试在子类上使用 @Builder(toBuilder = true)。
当toBuilder设置为false时,完全没有问题。
但是当我设置 toBuilder = true 时,我得到一个编译错误“Error:java: foo has private access in test.lombok.SuperClass”。
我想知道为什么会发生这种情况以及如何解决这个问题。
最佳答案
当 toBuilder 属性设置为 true 时,
Lombok 尝试在 SubClass 中创建 toBuilder 方法 在注释 @Builder 中。该方法返回 SubClassBuilder 类。这是 toBuilder 方法的样子,
public SuperClass.SubClass.SubClassBuilder toBuilder() {
return (new SuperClass.SubClass.SubClassBuilder())
.foo(this.foo).bar(this.bar);
}
如您所见,toBuilder 方法尝试直接访问 foo 属性,而不是通过方法 getFoo。由于 foo 是私有(private)的并且属于父类 SuperClass,您会收到以下错误:
错误:java:foo 在 test.lombok.SuperClass 中具有私有(private)访问权限
关于java - lombok @Builder(toBuilder = true) 在子类的构造函数上使用时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46481383/
我在对象实例上使用toBuilder()来创建构建器实例,然后构建方法来创建新实例。原始对象有一个列表,新对象是否引用相同列表或其副本? @Getter @Setter @AllArgsConstru
我的代码如下 package test.lombok; import lombok.*; @AllArgsConstructor(access = AccessLevel.PROTECTED) @Ge
我有以下类(class): @SuperBuilder(toBuilder = true) public abstract class Parent { //... } @SuperBuild
目前我有这三个类: @Value @NonFinal @SuperBuilder public class Parent { // Some fields } @Value @EqualsAn
我始终努力使我的代码完全不可变,并且根本不使用 setter。 当我需要更新对象、dto 或实体时,我使用 @Builder(toBuilder = true) 而不是 setter。 public
我是一名优秀的程序员,十分优秀!