java泛型限定符编译报错,找不到合适的方法,参数不匹配
package demo;import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
public class Test {
public class Result<T> {
}
public class Response {
}
public class DemoResponse extends Response {
}
public class Demo2Response extends Response {
}
public static void main(String[] args) {
List<Supplier<Result<? super Response>>> test = new ArrayList<>();
Supplier<Result<DemoResponse>> arg = (new Test()).getArg();
test.add(arg); // 编译过不去,这是为什么呢
Supplier<Result<Demo2Response>> arg = (new Test()).getArg2();
test.add(arg2);// 编译过不去,这是为什么呢
}
public Supplier<Result<DemoResponse>> getArg() {
return Result::new;
}
public Supplier<Result<Demo2Response>> getArg2() {
return Result::new;
}
}
请教下这是为什么呢?
回答:
List<? super Response> ll = new ArrayList<>();
ll.add(new Demo2Response());
ll.add(new DemoResponse());
List<Supplier<? extend Response>> l2 = new ArrayList<>();
l2.add(DemoResponse::new);
l2.add(Demo2Response::new);
List<Supplier<Result<? extends Number>>> l3 = new ArrayList<>();
l3.add(()->new Result<Integer>());
l3.add(()->new Result<Double>());
这么编译能通过。不过我觉得最好还是简化一下吧。泛型的泛型 和 泛型的规则不一样
回答:
super是下界通配符,只能匹配Response的父类
回答:
List<Supplier<Result<? super Response>>> test = new ArrayList<>();
这里你应该使用 extends, ?后面内容范围大一点;
然后即使用extends也会报错, 因为test对象使用了上界通配符, 使用了上界通配符的它不能使用set方法.
以上是 java泛型限定符编译报错,找不到合适的方法,参数不匹配 的全部内容, 来源链接: utcz.com/p/944280.html