0
クラスを定義し、クラス自己再帰と同じ型の値を返すメソッドを含むメソッドがあります。Javaジェネリックで自己再帰を止めるには?
しかし、これを使用して、再帰を停止することはできますか?
いくつかのコード:
public class StopSelfRecursion {
// base class
static class Class1<Self extends Class1<Self,T>, T> {
public Self getMyself() {
return (Self) this;
}
}
// derived 1
static class Class2<Self extends Class2<Self, T>, T> extends Class1<Self, T> {
}
// derived 2
static class Class3<Self extends Class2<Self, T>, T> extends Class2<Self, T> {
}
// want to stop recursion; want Class4 has only one parameter
static class Class4<T> extends Class3<Class3, T> {
}
public static void main(String[] args) {
Class1<?, Integer> v1 = new Class1<>();
Class2<?, Integer> v2 = new Class2<>();
Class3<?, Integer> v3 = new Class3<>();
System.out.println(v1.toString());
System.out.println(v2.toString());
System.out.println(v3.toString());
}
}
再帰を停止することができない場合は、なぜ?
それを停止できないという論理的な理由がない場合は、次のバージョンのJavaでこの機能を追加するのはどうですか?
たとえば、キーワードThisClass
などを追加できます。
は、あなたが存在していると主張、この再帰法の実際の例を投稿してもらえますか?私がここに示した例がその点を逃していると感じています。 – markspace
'(Self)this''キャストは安全ではありません。 'Self'は' Class1 'を拡張すると宣言されていますが、' this'は 'Class1 'の型であり、必ずしも 'Self'であるとは限りません。 –
newacct