在 java 中,Final 类不能被普通类扩展,但可以扩展泛型类型。这意味着什么?例如 Integer 是 JAVA API 中的最终类,该类无法扩展,但以下代码未显示任何错误。
public class SampleClass<T extends Integer> {
// memebers
}
在 java 中,Final 类不能被普通类扩展,但可以扩展泛型类型。这意味着什么?例如 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
本身不同的类型。