【发布时间】:2017-01-28 16:37:31
【问题描述】:
Java 不健全https://hackernoon.com/java-is-unsound-28c84cb2b3f#.8tf5qumlb
在本文中讨论了 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);
}
}
https://raw.githubusercontent.com/namin/unsound/master/doc/unsound-oopsla16.pdf
所以如果他们说这归结为一个空指针错误。但与大多数空指针错误不同
所以只是无法理解它在不同 IDE 上的编译或非编译
还有一个与之相关的开放错误https://bugs.openjdk.java.net/browse/JDK-8054941
还有 eclipse https://bugs.eclipse.org/bugs/show_bug.cgi?id=510900
【问题讨论】:
-
为什么这是在某些版本中编译而不是在某些版本中。有些事情已经解决或尚未解决?
-
这比您之前的问题尝试要好。但问题是什么?
-
如果您的问题是“您的代码是否应该编译”,答案是否定的。如果是这样,则相关编译器存在错误。
-
那么它为我编译?
标签: java generics compiler-errors wildcard openjdk