當它們沒有在方法中使用時,在方法簽名中指定泛型型別有什么用,例如考慮來自 Kafka Materialized 的以下方法:
public static <K, V, S extends StateStore> Materialized<K, V, S> as(String storeName) {
Named.validate(storeName);
return new Materialized(storeName);
}
private Materialized(String storeName) {
this.storeName = storeName;
}
此處方法中未使用 K、V、S 型別。
物化類的 Github 鏈接
uj5u.com熱心網友回復:
當它們沒有在方法中使用時,在方法簽名中指定泛型型別有什么用
您實際上正在(或應該)在方法中使用它們:
return new Materialized(storeName);
這是一個原始型別。這是您鏈接的源代碼的轉錄錯誤:
return new Materialized<>(storeName);
是以下的簡寫:
return new Materialized<K, V, S>(storeName);
但無論如何,方法上的型別變數僅在回傳型別中使用,在您呼叫該方法后使用。
例如,ArrayList<T>在方法中創建允許您將 的實體添加T到結果中。
<T> List<T> myMethod() {
return new ArrayList<>();
}
// At the call site:
List<String> list = myMethod();
list.add("Hello");
在 的情況下Materialized,這給出了關于根據這些型別變數宣告的欄位的型別資訊:Serde<K> keySerde,Serde<V> valueSerde和StoreSupplier<S> storeSupplier; 然后 Kafka 可以訪問這些欄位上的欄位/方法,這些欄位/方法可以執行特定型別的操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311145.html
上一篇:帶有泛型的Scala工廠模式
下一篇:C#:“'System.Collections.Generic.Dictionary<object,object>.KeyCollection'不包含'ToL
