我有以下接口:依賴
public interface Assembler<T, S> {
S assemble(T val);
}
public interface Slicer<T, V> {
V[] slice(T val);
}
我想有一個彙編程序實例中使用切片器實例,並調用它的切片()。我有以下幾點:
public class MyAssembler<T, S> implements Assembler<T, S> {
private final Slicer<T, V> slicer;
//ctor
public MyAssembler() {
slicer = new MySlicer<T, V>();
}
@Override
public S assemble(T val) {
V[] v = mySlicer.slice(val);
}
這不會編譯,因爲V形不知道(不能被解析爲一個類型)在MyAssembler。我無法將彙編器接口更改爲Assembler<T, S, V>
。有另一種方法可以定義依賴關係嗎?這不是非泛型類的問題。即使使用靜態工廠方法來獲得切片機的參考,未知V的問題仍然存在。有什麼建議麼?如果不能這樣做,任何人都可以推薦一種不同的方法或設計模式,以允許彙編程序調用切片器的slice()?
您可以爲'MyAssembler'聲明第三個類型變量。 –
我嘗試過使用'MyAssembler'。它會編譯,但是一旦嘗試實例化,例如:彙編器 asmblr = new MyAssembler ,則編譯失敗:彙編器類型參數的數量不正確;它不能用參數進行參數化。 –
pjscore10
第三個類型參數對於'MyAssembler'是必需的,而不是聲明類型'Assembler'。但在這裏看起來並不是很有用,因爲你不用'V'做任何事情。 –