5

昨日のセミナーで、プレゼンター(Peter Sestoft)は、共分散と逆分散の両方を特徴とする3つのクラスを持つ小さなJavaプログラムを示しました。javacを使用してコンパイルしようとすると、タイプチェッカーはStackOverflowExceptionをスローします。

このスニペットは、Microsoftで働いている何人かの人によって開発されています(1人はケネディと呼ばれていたと思います)。

Googleを使用してそれを見つけることができません。コードスニペットを知っている人はいますか?ここに貼り付けて(最大10行のコード)、誰でも見ることができますか?:)

とても楽しかったです...

4

2 に答える 2

3

bugs.sun.comを試しましたか?これStackOverflowErrorは5.0のみです。

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) {}

}

もう1つ(ここでも5.0のみ):

class F<T> {}
class C<X extends F<F<? super X>>> {
    C(X x) {
        F<? super X> f = x;
    }
}
于 2009-11-25T12:20:04.957 に答える
3

見つけました(プレゼンターに尋ねました)!これStackOverflowExceptionは 6.0 と 7.0 の両方にあります。

class T { }
class N<Z> { }
class C<X> extends N<N<? super C<C<X>>>> {
  N<? super C<T>> cast(C<T> c) { return c; }
}

これは、Andrew Kennedy と Benjamin Pierce: On Decidability of Nominal Subtyping with Variance によるものです。オブジェクト指向言語の基礎と開発に関する国際ワークショップ g(FOOL/WOOD'07)、ニース、フランス 2007.

于 2009-11-27T13:40:20.657 に答える