在java中,最终类不能通过普通类扩展,但可以扩展泛型类。这意味着什么?例如,Integer是JAVA API中的最终类,此类无法扩展,但以下代码不显示任何错误。
public class SampleClass<T extends Integer> {
// memebers
}
答案 0 :(得分:4)
虽然代码没有显示错误,但类型参数T
的任何实际绑定都必须是Integer
,因为正如您所正确指出的那样,Integer
是{{1} } .class。泛型类型参数虽然使用final
关键字,但未定义实际类;因此,您发布的代码中没有错误。
答案 1 :(得分:1)
这是因为编译器期望T
为Integer
类型或从Integer
派生的类型。
由于Integer
是final
类,T
只能是Integer
。
只有在您尝试从Integer
例如,编译器将在此处抛出错误:
class IncompilableInteger extends Integer { }
因为它试图从Integer
创建类型,但这不会:
class Compilable <T extends Integer> { }
因为它试图创建包含类型对象的类型 - 要么是Integer
,要么是从Integer
派生但不是不同的类型Integer
本身。