Builder annotation access level private

83 Views Asked by At

I'm getting this compilation error:

Lombok annotation handler class lombok.eclipse.handlers.HandleBuilder failed - See error log. Java (0) [1, 1]

The method builder() is undefined for the type NestedReference Java (67108964) [22, 26]

My class is:

package net.gencat.transversal.espaidoc.domain.model.reference;

import lombok.AccessLevel;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;

@Getter
@Builder(access = AccessLevel.PRIVATE)
@EqualsAndHashCode
@ToString
public class NestedReference {
    private final ReferenceId referenceId;

    private NestedReference(ReferenceId referenceId) {
        validate(referenceId);
        this.referenceId = referenceId;
    }

    public static NestedReference of(ReferenceId referenceId) {
        return NestedReference.builder()   // <<<< The method builder() is undefined for the type NestedReference Java (67108964) [22, 26]
                .referenceId(referenceId)
                .build();
    }

    private static void validate(ReferenceId referenceId) {
        if (referenceId == null) {
            throw new IllegalArgumentException("ReferenceId cannot be null or empty");
        }
    }
}

My class is a immutable Value Object and I need to leverage @Builder annotation builder only inside my class.

Any ideas?

1

There are 1 best solutions below

3
Mr. Polywhirl On

Calling NestedReference.builder() should work.

Which version of Java and Lombok are you using?

Have you tried calling the NestedReferenceBuilder constructor directly?

public static NestedReference of(ReferenceId referenceId) {
    return new NestedReferenceBuilder()
            .referenceId(referenceId)
            .build();
}

Alternative to builder

You can leverage the power of records and Lombok in a different way:

import lombok.NonNull;

public record NestedReference(@NonNull ReferenceId referenceId) {}
public static void main(String[] args) {
    NestedReference ref = new NestedReference(null);
    System.out.println(ref);
}
Exception in thread "main" java.lang.NullPointerException: referenceId is marked non-null but is null
    at org.example.NestedReference.<init>(NestedReference.java:5)
    at org.example.Main.main(Main.java:6)

If you cannot use records yet, you can use @Value:

import lombok.NonNull;
import lombok.Value;

@Value
public class NestedReference {
    @NonNull ReferenceId referenceId;
}