ジェネリック型パラメーターを持つインターフェイスを使用しているとします
interface Foo<T> {
T getOne();
void useOne(T t);
}
意図は、型Tが抽象的であることです: の実装に型制約を強制しFooますが、クライアント コードは正確に何であるかを気にしませんT。
これは、ジェネリック メソッドのコンテキストでは問題ありません。
public <T> void doStuff(Foo<T> foo) {
T t = foo.getOne();
/* do stuff */
foo.useOne(t);
}
doStuffしかし、ある状態をクラスに保存して、 の作業を分割したいとしBarます。この場合、 to の型パラメータを追加する必要があるようFooですBar。
public class Bar<T> {
private Foo<T> foo;
private T t;
/* ... */
public void startStuff() {
t = foo.getOne();
}
public void finishStuff() {
foo.useOne(t);
}
}
T型パラメーターは のパブリック インターフェイスに表示されないBar(つまり、どのメソッド パラメーターまたは戻り値の型にも含まれない)ため、これはちょっと奇妙です。「定量化する」方法はありTますか?つまり、次のように、パラメータTを のインターフェイスで非表示にすることはできBarますか?
public class Bar {
<T> { // foo and t have to use the same T
private Foo<T> foo;
private T t;
} // T is out of scope
...
}