0

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

public class SampleClass<T extends Integer> {

// memebers

}
4

2 回答 2

4

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

于 2013-02-17T06:15:13.677 回答
1

那是因为编译器期望T是类型Integer或派生自Integer.

既然Integerfinal类,T就只能是Integer

仅当您尝试从以下位置创建类型时才会发生该错误Integer

例如,编译器会在这里抛出错误:

class IncompilableInteger extends Integer { }

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

class Compilable <T extends Integer> { }

因为它试图创建一个包含类型对象的类型——要么是一个Integer类型,要么是一个派生自IntegerInteger本身不同的类型。

于 2013-02-17T06:17:15.243 回答