Шаблон Builder с использованием дженериков Java - PullRequest
0 голосов
/ 17 октября 2019

Я не совсем понимаю, как лучше всего реализовать реализацию шаблона 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 классе?

1 Ответ

0 голосов
/ 17 октября 2019

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

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

...