下面的代码是在某些IDE中编译的,而不是在某些IDE中编译的“Java不健全”

下面的代码是在某些IDE中编译的,而不是在某些IDE中编译的“Java不健全”,java,generics,compiler-errors,wildcard,openjdk,Java,Generics,Compiler Errors,Wildcard,Openjdk,Java是不健全的 本文讨论了java类型安全性,它是在某些java版本中编译的,而不是在某些java版本中编译的 class Unsound { static class Constrain<A,B extends A>{} static class Bind<A> { <B extends A> A upcast(Constrain<A,B> constrain , B b){

Java是不健全的

本文讨论了java类型安全性,它是在某些java版本中编译的,而不是在某些java版本中编译的

class Unsound {
    static class Constrain<A,B extends A>{}
    static class Bind<A> {
        <B extends A>
        A upcast(Constrain<A,B> constrain , B b){
            return b;
        }
    }
    static <T,U> U coerce(T t){
        Constrain<U,? super T> constrain = null;
        Bind <U> bind = new Bind<U>();
        return bind.upcast(constrain,t);
    }
    public static void main(String ...s){
        String zero = Unsound.<Integer,String>coerce(0);
    }
}
所以如果他们说这归结为一个空指针错误。但与大多数空指针错误不同

所以不能理解它在不同IDE上的编译或非编译

还有一个与之相关的开放bug


eclipse也

您的问题的答案在您引用的文章中

如果你的编译器没有检查我们的例子,我有消息告诉你。不,您的编译器没有捕获到错误。事实上,编译器本身有一个bug。你的编译器坏了。Java规范说这个例子应该进行类型检查和编译


现在,只要将这一点与不同的IDE可能使用不同的编译器相结合,Eclipse使用自己的编译器,IntelliJ默认使用javac,但它是可配置的,等等,您就有了怀疑:

为什么这是在某些版本中编译而不是在某些版本中编译。有些事情已经解决了或者还没有解决?这比你之前的问题尝试要好。但问题是什么?如果你的问题是你的代码是否应该编译,答案是否定的。如果应该编译,那么相关的编译器有一个bug。那么它是为我编译的吗?