Lombok Builder soll andere Klasse bauen

Hallo zusammen
ich möchte in meinem Test verschiedene Klassen bauen. Dazu soll das "Testframework" die Möglichkeit anbieten mit einem Builder sich die Testklassen zu bauen. Also die eigentlichen Klassen besitzen keinen Builder. z.B so :
Java:
@Slf4j
public class LocalAssociation extends Association {

    /**
     * default constructor <br>
     * set the accepted list types <br>
     *
     * @param name
     */
    public LocalAssociation(String name) {
        super(name);

        log.debug("create a new {} : {}", getClass().getSimpleName(), name);
        setAcceptedElementType(SportsClub.class);
    }
}

In der Testklasse soll nun in etwas folgendes Passieren :
Java:
    @Builder
    public static class LocalAssociationBuilder {
   
        private String name;
        @Singular("addSportsClub") private List<SportsClub> sportsClubList;
       
        public LocalAssociation build() {
            LocalAssociation localAssociation = new LocalAssociation(name);
            localAssociation.addOrUpdate(sportsClubList);
           
            return localAssociation;
        }       
    }

Wenn ich nun diesen Builder aufrufe :
Java:
LocalAssociationBuilder.builder().name("test").build();
liefert die build() Methode immer nur einen LocalAssociationBuilder zurück.
Nun meine Frage : Ist mein Vorhaben mit Lombok überhaupt zu realisieren - oder muss ich das "per Hand" machen?

Vielen Dank
 
Lombok kann das AFAICT nicht. Ich wünsche mir z.B. seit längerem eine @InheritConstructors Annotation in Lombok für Exception Klassen, im GitHub Issue dazu klingt es aber so, als ob Lombok nur auf lexikalischer Ebene arbeitet, nicht auf semantischer. Deswegen kann Lombok nicht die Super-Klasse suchen, ggf. sogar parsen oder aus dem Bytecode Format lesen (die Klasse kann ja auch irgendwo aus dem Classpath kommen) und dann damit Dinge anstellen.

P.S.: Die @Builder Annotation muss an die Klasse, die gebaut werden soll, nicht an den Builder selbst.
 
Und wenn du stattdessen den Bytecode zur Laufzeit generieren lässt (Lombok ist ja Compilezeit, wenn ich mich nicht irre, hab es noch nicht verwenden, nur gelesen)?
Mit Bibliotheken wie ByteBuddy, oder mehr Low-Level auch Javassist oder cglib, könntest du so etwas meines Wissens nach erreichen…
 
Und wenn du stattdessen den Bytecode zur Laufzeit generieren lässt (Lombok ist ja Compilezeit, wenn ich mich nicht irre, hab es noch nicht verwenden, nur gelesen)?
Mit Bibliotheken wie ByteBuddy, oder mehr Low-Level auch Javassist oder cglib, könntest du so etwas meines Wissens nach erreichen…
Da stellt sich dann die Frage, ob das den Aufwand Wert ist. Meine Antwort darauf ist ein ganz klares Nein.
 

Zurück
Oben