在 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本身不同的类型。