如何在Java泛型中停止自递归?

Dim*_*ims 0 java generics recursion

有定义类的技术,包含一个方法,返回与类相同类型的值 - 自递归.

但是使用它,是否可以停止递归?

一些代码:

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());


   }
}
Run Code Online (Sandbox Code Playgroud)

如果不能停止递归,为什么呢?

如果没有逻辑原因无法阻止它,那么在下一版本的Java中添加此功能呢?

例如,ThisClass可以添加关键字或其他内容.

Oli*_*rth 5

除了修复编译问题之外,我不是100%清楚问题是什么.您可以通过简单地将定义更改为Class4:

static class Class4<T> extends Class3<Class4<T>, T>
                                         ^^
Run Code Online (Sandbox Code Playgroud)

[ 实例 ]