Java通用通配符边界不起作用
我遇到过这样一种情况:我无法理解所展示的编译器行为背后的原因。我已经编写了以下代码片段-Java通用通配符边界不起作用,java,generics,Java,Generics,我遇到过这样一种情况:我无法理解所展示的编译器行为背后的原因。我已经编写了以下代码片段- public class OutgoingStub<T> { public OutgoingStub<T> tryThis(T val){ return new OutgoingStub<T>(); } public void f(Set<? extends Number> set){ } publ
public class OutgoingStub<T> {
public OutgoingStub<T> tryThis(T val){
return new OutgoingStub<T>();
}
public void f(Set<? extends Number> set){
}
public static void main(String[] args) {
Set<? extends Number> set = new HashSet<Integer>();
**OutgoingStub<Set<? extends Number>> stub = Mocktest.mock(set);** //Unable to assign the reuturn value in a variable. compiler complains.
}
}
class Mocktest {
public static <T> OutgoingStub<T> mock(T val){
return new OutgoingStub<T>();
}
}
公共类支出存根{
公共支出存根交易(T val){
返回新的支出存根();
}
public void f(Set调用mock
时,应该明确告诉编译器要使用什么类型的参数:
OutgoingStub<Set<? extends Number>> stub = Mocktest.<Set<? extends Number>>mock(set);
OutgoingStub调用mock
时,应该明确告诉编译器要使用的类型参数:
OutgoingStub<Set<? extends Number>> stub = Mocktest.<Set<? extends Number>>mock(set);
OutgoingStub