昨天在一个研讨会上,主持人 (Peter Sestoft) 展示了一个小的 Java 程序,有 3 个类,同时具有协方差和反方差。尝试使用 javac 进行编译时,类型检查器将抛出 StackOverflowException。
这段代码是由一些在 Microsoft 工作的人开发的(想想一个叫 Kennedy 的人)。
无法使用 Google 找到它。有谁知道代码片段,你能把它贴在这里吗(最多10行代码),让大家看看? :)
很好玩...
最佳答案
您是否尝试过 bugs.sun.com?这是 5.0 中的 StackOverflowError
:
import java.util.*;
class Test<T extends Comparable<? super T>> {
abstract class Group<E extends Comparable<? super E>>
extends ArrayList<E>
implements Comparable<Group<? extends E>> {}
abstract class Sequence<E extends Comparable<? super E>>
extends TreeSet<E>
implements Comparable<Sequence<? extends E>> {}
public void containsCombination(SortedSet<Group<T>> groups,
SortedSet<Sequence<T>> sequences) {
foo(groups, sequences);
}
<C extends Collection<T>> void foo(SortedSet<? extends C> setToCheck,
SortedSet<? extends C> validSet) {}
}
这是另一个(同样仅限 5.0):
class F<T> {}
class C<X extends F<F<? super X>>> {
C(X x) {
F<? super X> f = x;
}
}
关于在编译器或类型检查器 (javac) 中导致堆栈溢出的 Java 片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1796144/