我读通过莫卧儿(第3版)(最好的SCJP的书,我所遇到的)和727页上的SCJP,它说以下内容:Java泛型:子类化一个通用的超类 - 子类是一个可定义的类型?
class MyIntList extends ArrayList <Integer> {} // A reifiable subclass
现在我在这里只是有点疑惑。我知道子类属于非泛型类型,但由于它扩展了ArrayList < Integer>和参数化的< Integer>将最终被擦除,并且此子类将继承其超类的属性,为什么这个子类MyIntList是可重用类型?
无论如何,这种区分在这种情况下如何重要?很明显,新的MyIntList().getClass()== MyIntList.class'不会丢失任何信息(因为还有什么可能呢?) - 它是否正确地将单词“reifiable”赋值给它还是不? –
您似乎认为在这种情况下,'MyIntList'会在运行时将其超类参数''擦除。不是这种情况。泛型类的具体子类保留其超类泛型参数的类型信息。这使得一些[非常漂亮的技巧]成为可能(http://gafter.blogspot.com/2006/12/super-type-tokens.html)。 –
@亨宁,想想所有的工具,测试等可以写在一个约束列表。 –