Java 通用方法<&燃气轮机;类型参数

Java 通用方法<&燃气轮机;类型参数,java,generics,Java,Generics,在图表库中,我发现了以下类: public class SeriesBuilder<T> { private T[] data; private SeriesBuilder() { } public static SeriesBuilder<?> get() { return new SeriesBuilder(); } public SeriesBuilder<T> withDat

在图表库中,我发现了以下类:

public class SeriesBuilder<T> {
    private T[] data;

    private SeriesBuilder() {
    }

    public static SeriesBuilder<?> get() {
        return new SeriesBuilder();
    }
    
    public SeriesBuilder<T> withData(T... data) {
        this.data = data;
        return this;
    }

    public Series<T> build() {
        Series<T> series = new Series<T>();
        series.setData(data);
        return series;
    }
}
公共类序列生成器{
私有T[]数据;
私有序列生成器(){
}
公共静态序列生成器get(){
返回新的序列生成器();
}
带数据的公共序列生成器(T…数据){
这个数据=数据;
归还这个;
}
公共系列构建(){
系列=新系列();
系列。设置数据(数据);
返回序列;
}
}
使用代码:

SeriesBuilder.get()
             .withData(<<<<<???>>>>)
             .build()
SeriesBuilder.get()
.带数据(
由于类型的原因,我无法找到如何使用该类。我找不到填充签名的参数。如何使用该参数

您几乎无法使用它。除了通过
SeriesBuilder.get()之外,无法获取
SeriesBuilder
实例
,您通过这种方式获得的实例的类型参数是未知的——事实上,
get
实际实例化的是原始类型。如果您愿意,您应该能够生成一系列
null
s

甚至不能有任何
SeriesBuilder
的子类(这可能更有用),因为它唯一的构造函数是私有的

不必说得太详细,这个
SeriesBuilder
是一个非常讨厌的东西。对于更喜欢工厂方法(例如
SeriesBuilder.get()
)有一个理由超过构造函数,但该实现非常糟糕。除了类型参数问题外,它不会将结果对象初始化为有效状态。这必须通过
withData()
单独完成,那么
get()
的目的是什么呢

我倾向于认为,无论是谁写的,都是在寻找通过
withData()
上的这个变体可以更好地表达的东西:

publicstaticseriesbuilderwithdata(T…data){
SeriesBuilder=新的SeriesBuilder();
builder.data=数据;
返回生成器;
}
你可以把它当作

SomeType item1 = /* value */;
SomeType item2 = /* value */;
SomeType item3 = /* value */;

Series<SomeType> series =
        SeriesBuilder.withData(item1, item2, item3)
                     .build();
SomeType item1=/*value*/;
SomeType item2=/*值*/;
SomeType item3=/*值*/;
系列=
SeriesBuilder.withData(项目1、项目2、项目3)
.build();

null
是唯一有效的参数。编写该SeriesBuilder的人不知道如何使用泛型。签名应该是
public static SeriesBuilder get(){return new SeriesBuilder();}
@Eklavya注意构造函数是私有的。我被迫使用get()。
SomeType item1 = /* value */;
SomeType item2 = /* value */;
SomeType item3 = /* value */;

Series<SomeType> series =
        SeriesBuilder.withData(item1, item2, item3)
                     .build();