Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有Java泛型的生成器模式_Java_Generics_Builder - Fatal编程技术网

带有Java泛型的生成器模式

带有Java泛型的生成器模式,java,generics,builder,Java,Generics,Builder,我不太明白如何最好地为下面的泛型层次结构实现构建器模式 基类 @lombok.Data public class Node<T> { private T data; private String source; } @lombok.Data 公共类节点{ 私有T数据; 私有字符串源; } 儿童班 @lombok.Data public class MyNode extends Node<MyNode> { private String fir

我不太明白如何最好地为下面的泛型层次结构实现构建器模式

基类

@lombok.Data
public class Node<T> {

    private T data;
    private String source;
}
@lombok.Data
公共类节点{
私有T数据;
私有字符串源;
}
儿童班

@lombok.Data
public class MyNode extends Node<MyNode> {
    private String firstDummy;
    private String secondDummy;
}
@lombok.Data
公共类MyNode扩展了节点{
私有字符串;
私有字符串;
}
是否要将匿名生成器类应用于父类并在子类中扩展它

已更新

如果我有一个像这样的匿名建设者

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数据;
私有最终字符串源;
公共静态抽象类生成器{
私有字符串源;
带源的公共生成器(字符串源){
this.source=源;
归还这个;
}
公共摘要S build();
}
公共静态生成器(){
返回新生成器(){
@凌驾
公共节点生成(){
返回新节点(本节点);
}
};
}
受保护节点(生成器){
this.source=builder.source;
}
}

然后如何在
节点
类中实现
T
的生成器?

如果您想练习im实现生成器,那么是的,您可以实现它们。@nixgadget的提示很好


但是如果你只需要一个构建器,添加一个@builder注释,Lombok会帮你完成。

可能会给你一些见解。太棒了。谢谢@jrook