小编use*_*633的帖子

Java Bounded Generics:类型推断错误?(方法调用,JLS 15.12.2.7)

对于以下代码段:

import java.util.List;

public class Main {
    interface Interface1<T> {}
    interface Interface2<T> extends Interface1<T> {}
    static class Bound {}
    interface BoundedI1<T extends Bound> extends Interface1<T> {}
    interface BoundedI2<T extends Bound> extends Interface2<T> {}

    public static void main(String[] args) {
        test((List<BoundedI2<?>>) null);
        //test2((List<BoundedI2<?>>) null);
    }

    public static void test(List<? extends Interface2<? extends Bound>> list) { test2(list); }

    public static void test2(List<? extends Interface1<? extends Bound>> list) {}
}
Run Code Online (Sandbox Code Playgroud)

第一次调用时编译器正常,但如果我取消注释第二次调用,则会抱怨.这是类型推理系统中的错误,还是有人可以解释为什么JLS中的推理规则在这里失败?

在6u43和7u45 Oracle JDK上进行了测试.

更新:似乎eclipsec接受它就好了.不幸的是我无法真正改变我们的工具链:P,但在编译器中找到差异很有意思.

错误消息,由ideone打印(很酷的工具顺便说一句):

Main.java:12: error: method test2 in class Main …
Run Code Online (Sandbox Code Playgroud)

java generics type-inference compiler-errors jls

10
推荐指数
1
解决办法
375
查看次数

标签 统计

compiler-errors ×1

generics ×1

java ×1

jls ×1

type-inference ×1