通用类型扩展最终类

时间:2013-02-17 06:12:17

标签: java

在java中,最终类不能通过普通类扩展,但可以扩展泛型类。这意味着什么?例如,Integer是JAVA API中的最终类,此类无法扩展,但以下代码不显示任何错误。

public class SampleClass<T extends Integer> {

// memebers

}

2 个答案:

答案 0 :(得分:4)

虽然代码没有显示错误,但类型参数T的任何实际绑定都必须是Integer,因为正如您所正确指出的那样,Integer是{{1} } .class。泛型类型参数虽然使用final关键字,但未定义实际类;因此,您发布的代码中没有错误。

答案 1 :(得分:1)

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

由于Integerfinal类,T只能是Integer

只有在您尝试从Integer

创建类型时,才会出现此错误

例如,编译器将在此处抛出错误:

class IncompilableInteger extends Integer { }

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

class Compilable <T extends Integer> { }

因为它试图创建包含类型对象的类型 - 要么是Integer,要么是从Integer派生但不是不同的类型Integer本身。