下面的代码是在某些IDE中编译的,而不是在某些IDE中编译的“Java不健全”
Java是不健全的 本文讨论了java类型安全性,它是在某些java版本中编译的,而不是在某些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){
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。那么它是为我编译的吗?