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