Шаблон построителя с дженериками Java

Я не совсем понимаю, как лучше всего реализовать шаблон Builder для следующей иерархии дженериков.

Базовый класс,

@lombok.Data
public class Node<T> {

    private T data;
    private String source;
}

Детский класс,

@lombok.Data
public class MyNode extends Node<MyNode> {
    private String firstDummy;
    private String secondDummy;
}

Можно ли каким-либо образом применить анонимный класс строителя к родительскому и расширить его в дочернем классе?

Обновлено

Если у меня есть такой анонимный конструктор для родителя,

public class Node<T> {

    private T data;
    private final String source;

    public static abstract class Builder<S extends Node> {

        private String source;

        public Builder<S> withSource(String source) {
            this.source = source;
            return this;
        }

        public abstract S build();
    }

    public static Builder<?> builder() {
        return new Builder<Node>() {
            @Override
            public Node build() {
                return new Node(this);
            }
        };
    }

    protected Node(Builder<?> builder) {
        this.source = builder.source;
    }
}

Как мне реализовать конструктор для T в классе Node?


person nixgadget    schedule 16.10.2019    source источник
comment
этот вопрос может дать вам некоторое представление.   -  person jrook    schedule 17.10.2019
comment
блестящий. спасибо @jrook   -  person nixgadget    schedule 17.10.2019


Ответы (1)


Если вы хотите попрактиковаться в реализации сборщиков, то да, вы можете их реализовать. Намек @nixgadget хорош.

Но если вам просто нужен конструктор, добавьте аннотацию @Builder, и Lombok сделает это за вас.

person mentallurg    schedule 16.10.2019