为什么Java不允许你从泛型类型变量继承?

public class MyClass<T> extends T {...}

以上声明将无法编译并显示错误:

error: unexpected type
class MyClass<T> extends T {}
                         ^
  required: class
  found:    type parameter T
  where T is a type-variable:
    T declared in class MyClass

我真的不能想到发生这种情况的原因,所以我想知道是否有人可以解释为什么Java不会让你继承泛型类型变量.

最佳答案
我能想到的最明显的原因甚至不是类型擦除;事实上,当你创建一个B的子类时,Java编译器需要知道构造函数B有什么.如果一个类没有无参数构造函数,那么它的子类必须调用其定义的构造函数之一.但是当你宣布时

public class MyClass<T> extends T {...}

编译器绝对不可能知道超级构造函数是什么,因为T在编译时并不是固定的(毕竟这是泛型的全部要点),这是Java中不允许的情况.

转载注明原文:为什么Java不允许你从泛型类型变量继承? - 代码日志