为什么封闭类不包含在内部类构造函数的泛型参数中?

gde*_*ohn 3 java generics reflection

看看这个.

import java.lang.reflect.*;
import java.util.Arrays;

class Test {
    class Inner {
        public <T> Inner(T arg) {}
    }

    public static void main(String[] args) {
        Constructor<?> constructor = Test.Inner.class.getConstructors( )[0];
        System.out.println(
            "Regular parameters: " +
            Arrays.toString(constructor.getParameterTypes()) +
            "\nGeneric parameters: " +
            Arrays.toString(constructor.getGenericParameterTypes())
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此打印以下内容.

常规参数:[类Test,类java.lang.Object]
通用参数:[T]

我对Java内部类(即非静态)的理解是它们的构造函数隐式地为它们的封闭类提供了一个参数.因此,要获取实例Inner,您可以像这样调用它的构造函数.

Test.Inner foo = new Test().new Inner(new Object());
Run Code Online (Sandbox Code Playgroud)

实际发生的是将实例Test传递给构造函数Inner(以及任何其他参数),并将其分配给隐式实例字段.

检查这个结构的nullary构造函数Inner,因为调用getParameterTypes返回一个包含Class表示TestObject(擦除T)的对象的数组.

但是,由于构造函数是通用的,因此调用getGenericParameterTypes将返回仅包含类型变量的数组T.缺少封闭类的隐式参数.

只有当内部类构造函数声明一个类型变量时,才会发生这种情况.为什么这样做?这是一个错误吗?