Eri*_*est 5 java super generic-type-argument
我在项目中遇到了一个奇怪的问题.现在我简化了问题并在这里写了一个小例子来说明我的困惑:
public class Question {
class Q1 {}
class Q2 extends Q1 {}
interface In<T> {
void f(T t);
}
List<Q2> list;
void f(In<? super List<? super Q2>> in) {
in.f(list);
}
static void g() {
Question question = new Question();
In<Collection<Q1>> in1 = new In<Collection<Q1>>() {
@Override
public void f(Collection<Q1> o) {}
};
In<List<Q2>> in2 = new In<List<Q2>>() {
@Override
public void f(List<Q2> o) {}
};
question.f(in1); //Error!
question.f(in2); //Error!
}
}
Run Code Online (Sandbox Code Playgroud)
我的目标是使该方法f(In<? super List<? super Q2>>)更灵活.我可以通过in1或in2该方法.但两者都不能通过!怎么了?
也许这个答案会有所帮助.但我的问题是不同的!我的泛型类型是In<? super List<? super Q2>>泛型类型中的泛型类型.
小智 0
In<Collection<? extends Q1>> in1 = new In<Collection<? extends Q1>>() {
@Override
public void f(Collection<? extends Q1> o) {}
};
In<List<? extends Q2>> in2 = new In<List<? extends Q2>>() {
@Override
public void f(List<? extends Q2> o) {}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |