【发布时间】:2012-10-05 02:47:36
【问题描述】:
我有一些类似的代码:
public class Main {
private static abstract class Bar {}
private static class SubBar extends Bar {}
private static abstract class Baz<T extends Bar> {
private T t;
public void setT(T t) {
this.t = t;
}
}
private static class SubBaz extends Baz<SubBar> {}
private void foo(Baz<? extends Bar> baz, Bar bar) {
baz.setT(bar);
}
}
这会导致错误:
error: method setT in class Baz<T> cannot be applied to given types;
required: CAP#1
found: Bar
reason: actual argument Bar cannot be converted to CAP#1 by method invocation conversion
where T is a type-variable:
T extends Bar declared in class Baz
where CAP#1 is a fresh type-variable:
CAP#1 extends Bar from capture of ? extends Bar
我不明白为什么。方法 setT 应该接受扩展 Bar 的东西,我正在传递类 Bar 的东西。
【问题讨论】:
-
我不是。抽象的名字只会让我感到困惑。