假设我使用的是具有泛型类型参数的接口
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
...
}