假設我使用的是具有泛型類型參數的接口
interface Foo {
T getOne();
void useOne(T t);
}
目的是類型T是抽象的:它對Foo的實作強制執行類型限制,但用戶端代碼并不完全關心T是什麼.
這在通用方法的上下文中沒有問題:
public void doStuff(Foo foo) {
T t = foo.getOne();
foo.useOne(t);
}
但是假設我想要分解doStuff的工作,在類Bar中儲存一些狀态.在這種情況下,我似乎需要将Foo的類型參數添加到Bar.
public class Bar {
private Foo foo;
private T t;
public void startStuff() {
t = foo.getOne();
}
public void finishStuff() {
foo.useOne(t);
}
}
這有點奇怪,因為類型參數T沒有出現在Bar的公共接口中(即,它不包含在任何方法參數或傳回類型中).有沒有辦法“量化T”?即,我可以安排參數T隐藏在Bar的界面中,如下所示嗎?
public class Bar {
{ // foo and t have to use the same T
private Foo foo;
private T t;
} // T is out of scope
...
}