我想爲我的應用程序中使用的不同對象創建一個持有者類,我最終得到的代碼在某種程度上正常工作,生成器模式對於可選字段,但我想這保持器可以被重構爲接受任何任意數目的參數如何爲持有人正確使用泛型
package pojos;
public class Holder<T, R, S, U> {
private final T t;
private final R r;
private final S s;
private final U u;
private Holder(final Builder<T, R, S, U> builder) {
this.t = builder.t;
this.r = builder.r;
this.s = builder.s;
this.u = builder.u;
}
public T getField1() {
return this.t;
}
public R getField2() {
return this.r;
}
public S getField3() {
return this.s;
}
public U getField4() {
return this.u;
}
public static class Builder<T, R, S, U> {
private T t;
private R r;
private S s;
private U u;
public Builder field1(final T t) {
this.t = t;
return this;
}
public Builder field2(final R r) {
this.r = r;
return this;
}
public Builder field3(final S s) {
this.s = s;
return this;
}
public Builder field4(final U u) {
this.u = u;
return this;
}
public Holder<T, R, S, U> build() {
return new Holder<>(this);
}
public Builder<T, R, S, U> copy(final Holder<T, R, S, U> rowMappingsHolder) {
this.t = rowMappingsHolder.getField1();
this.r = rowMappingsHolder.getField2();
this.s = rowMappingsHolder.getField3();
this.u = rowMappingsHolder.getField4();
return this;
}
}
}使用的
實施例:
protected Holder<Row, Map<Integer, String>, Void, Void> getRowMapHolder(Row row, Map<Integer,String> map) {
return (Holder<Row, Map<Integer, String>, Void, Void>) new Holder.Builder<Row, Map<Integer, String>,Void, Void>().field1(row).field2(map).build();
}
任何ID EAS?
問候
〜馬爾科
「任意數量的參數」這些參數是相同類型的嗎? –
不,您可以看到持有者可以包含不同類型的對象,請參閱「使用示例」僅使用前兩個,一個持有類型「Row」,第二個持有類型爲「Map」的對象,因此這裏的問題是如何創建一個持有者,我們可以傳遞多個類型並按照他們在Holder中插入的順序檢索它們,因此不再需要「field1」,「field2」... –
如果您沒有顯式結構/您想要維護的值的集合,僅使用Map或Set作爲持有者會更容易,並且如果有關該持有者的內容格式錯誤(丟失了所需的參數或其他內容),則拋出無效的參數異常 – Tezra