sdicola
sdicola

Reputation: 962

Builder for existing classes

I have got the following scenario in which I got four classes autogenerated (in a JAR):

 Class A{
     B bEl = ...;
   }

Class B{
C cEl = ...;
}

Class C{
 D dEl = ...;
}

Class E{
 E eEl=...;
}

Setting up those objects it is quite painful and error prone. Therefore, I was wondering if there is a better way to automatically construct a builder. I am aware of Lombok but I cannot edit that code and I cannot add the @Builder annotation.

Any recommendation?

Upvotes: 2

Views: 633

Answers (1)

Ivan Lymar
Ivan Lymar

Reputation: 2293

If you are not allowed to change existing classes you can extend them:

public class Existing {

    String a;
    String b;

    public Test(String a, String b) {
        this.a = a;
        this.b = b;
    }

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    public String getB() {
        return b;
    }

    public void setB(String b) {
        this.b = b;
    }
}

public class ExistingBuilder extends Existing {

    @Builder
    public ExistingBuilder(String a, String b) {
        super(a, b);
    // in case super class doesn't have all arguments constructor just call setters
    // setA(a);
    // setB(b);
    }
}

So as you can see it's doable, but super class should have getters/setters or all args constructor.

Upvotes: 2

Related Questions