在图表库中,我找到了以下类别:
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;
}
}
使用代码:
SeriesBuilder.get()
.withData(<<<<<???>>>>)
.build()
由于<?>类型,我无法找到如何使用该类。我找不到能满满签名的参数。如何使用?
答案 0 :(得分:0)
由于<?>类型,我无法找到如何使用该类。我找不到能满满签名的参数。如何使用?
您几乎无法使用它。除了通过SeriesBuilder
之外,无法获取SeriesBuilder.get()
实例,并且通过这种方式获取的实例的类型参数是未知的-实际上,get
实际实例化的是原始类型。如果愿意,您应该能够产生一系列null
。
甚至没有SeriesBuilder
的任何子类(可能更有用),因为它的唯一构造函数是私有的。
在这个问题上,SeriesBuilder
一点都不令人讨厌。对于工厂方法(例如SeriesBuilder.get()
),而不是构造方法,有一个论点,但这种实现很糟糕。除了类型参数问题外,它不会将结果对象初始化为有效状态。这必须通过withData()
单独完成,所以get()
的意义是什么?
我倾向于认为,凡是写过这样的文章的人都在寻找可以通过withData()
上的这种变化更好地表达的东西:
public static <T> SeriesBuilder<T> withData(T ... data) {
SeriesBuilder<T> builder = new SeriesBuilder<>();
builder.data = data;
return builder;
}
您可以将其用作
SomeType item1 = /* value */;
SomeType item2 = /* value */;
SomeType item3 = /* value */;
Series<SomeType> series =
SeriesBuilder.withData(item1, item2, item3)
.build();