2013-02-17 165 views
0

在java中,最终类不能被普通类扩展,但可以扩展泛型类型。这是什么意思?例如Integer是JAVA API中的最后一个类,这个类不能被扩展,但下面的代码不会显示任何错误。扩展最终类的泛型类型

public class SampleClass<T extends Integer> { 

// memebers 

} 

回答

4

虽然代码显示没有错误,类型参数T则要以来的Integer,因为你注意到的任何实际的结合,Integerfinal类。泛型类型参数在使用关键字extends时未定义实际的类;因此您发布的代码没有错误。

1

这是因为编译器期望T的类型为Integer或从Integer派生的类型。

由于Integerfinal类,T只能是Integer

当你试图创建Integer

例如类型只可能发生错误,编译器会在这里引发错误:

class IncompilableInteger extends Integer { } 

,因为它正试图创建Integer类型,但这不会:

class Compilable <T extends Integer> { } 

,因为它正在尝试创建一种类型,其中包含类型的对象 - 要么是Integer要么是从Integer派生的类型,但它本身不是Integer