public SuperClass.SubClass.SubClassBuilder toBuilder() {
return (new SuperClass.SubClass.SubClassBuilder()).foo(this.foo).bar(this.bar);
而不是this.foo它应该是super.foo,代码将编译.在这种情况下,访问super.foo是可能的,因为SubClass是SuperClass的内部类,否则,Java也会禁止super.foo.
如果你想看到lombok为你自己生成的代码,将foo声明为public,然后编译,然后delombok(或反编译),你会看到这样的代码(然后将属性更改为private以查看错误发生的位置):
import java.beans.ConstructorProperties;
public class SuperClass {
public int foo;
@ConstructorProperties({"foo"})
protected SuperClass(int foo) {
this.foo = foo;
public int getFoo() {
return this.foo;
public static class SubClass extends SuperClass {
private int bar;
private SubClass(int foo, int bar) {
super(foo);
this.bar = bar;
public static SuperClass.SubClass.SubClassBuilder builder() {
return new SuperClass.SubClass.SubClassBuilder();
public SuperClass.SubClass.SubClassBuilder toBuilder() {
return (new SuperClass.SubClass.SubClassBuilder()).foo(this.foo).bar(this.bar);
public int getBar() {
return this.bar;
public static class SubClassBuilder {
private int foo;
private int bar;
SubClassBuilder() {
public SuperClass.SubClass.SubClassBuilder foo(int foo) {
this.foo = foo;
return this;
public SuperClass.SubClass.SubClassBuilder bar(int bar) {
this.bar = bar;
return this;
public SuperClass.SubClass build() {
return new SuperClass.SubClass(this.foo, this.bar);
public String toString() {
return "SuperClass.SubClass.SubClassBuilder(foo=" + this.foo + ", bar=" + this.bar + ")";
编辑:感谢@maaartinus指点我到super.foo,答案是用这个信息更新的.