为什么我在这里得到StackOverflowError?

Rom*_*man 3 java stack-overflow generics recursion

为什么这个java代码会产生StackOverflowError?我知道这与递归泛型类型参数有某种联系.但我不明白整个机制.

public class SomeClass<T extends SomeClass> {

    SomeClass() {
        new SomeClassKiller();
    }

    private class SomeClassKiller extends SomeClass<T> {
    }

    public static void main(String[] args) {
        new SomeClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 13

通用部分无关紧要 - 类嵌套也不重要.看看这个大多数等价的一对类,它应该更加明显:

public class SuperClass
{
    public SuperClass()
    {
        new SubClass();
    }
}

public class SubClass extends SuperClass
{
    public SubClass()
    {
        super();
    }
}
Run Code Online (Sandbox Code Playgroud)

所以子类构造函数调用超类构造函数 - 然后创建一个新的子类,调用超类构造函数,创建一个新的子类,等等......砰!