小编sul*_*an-的帖子

Java泛型不一致的行为?

为什么第一个方法编译,第二个方法不编译?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)

java generics

7
推荐指数
1
解决办法
409
查看次数

标签 统计

generics ×1

java ×1