ジェネリック型パラメーターを持つインターフェイスを使用しているとします
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
...
}