在java中,最终类不能被普通类扩展,但可以扩展泛型类型。这是什么意思?例如Integer是JAVA API中的最后一个类,这个类不能被扩展,但下面的代码不会显示任何错误。扩展最终类的泛型类型
public class SampleClass<T extends Integer> {
// memebers
}
在java中,最终类不能被普通类扩展,但可以扩展泛型类型。这是什么意思?例如Integer是JAVA API中的最后一个类,这个类不能被扩展,但下面的代码不会显示任何错误。扩展最终类的泛型类型
public class SampleClass<T extends Integer> {
// memebers
}
虽然代码显示没有错误,类型参数T
则要以来的Integer
,因为你注意到的任何实际的结合,Integer
是final
类。泛型类型参数在使用关键字extends
时未定义实际的类;因此您发布的代码没有错误。
这是因为编译器期望T
的类型为Integer
或从Integer
派生的类型。
由于Integer
是final
类,T
只能是Integer
。
当你试图创建从Integer
例如类型只可能发生错误,编译器会在这里引发错误:
class IncompilableInteger extends Integer { }
,因为它正试图创建从Integer
类型,但这不会:
class Compilable <T extends Integer> { }
,因为它正在尝试创建一种类型,其中包含类型的对象 - 要么是Integer
要么是从Integer
派生的类型,但它本身不是Integer
。