为什么第一个方法编译,第二个方法不编译?for Set和for的泛型ImmutableSet.Builder相同,其add方法的类型签名也相同.
import java.util.Set;
import java.util.HashSet;
import com.google.common.collect.ImmutableSet;
public class F {
public static ImmutableSet<? extends Number> testImmutableSetBuilder() {
ImmutableSet.Builder<? extends Number> builder = ImmutableSet.builder();
Number n = Integer.valueOf(4);
builder.add(n);
return builder.build();
}
public static Set<? extends Number> testJavaSet() {
Set<? extends Number> builder = new HashSet<Number>();
Number n = Integer.valueOf(4);
builder.add(n);
return builder;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用javac版本1.7.0_25来构建.我在第二种方法上得到以下错误,但在第一种方法上没有.我相信我应该在两种情况下都得到错误,因为将Number一个集合放入集合中的类型不正确? extends Number.
error: no suitable method found for add(Number)
builder.add(n);
^
method Set.add(CAP#1) is …Run Code Online (Sandbox Code Playgroud)