为什么`T extends String`被允许但是会发出警告?

Ami*_*nde 6 java generics

可能重复:
@SuppressWarnings for"extends String"

为什么T extends String允许但是发出警告?

类型参数T不应受最终类型String的限制.最终类型无法进一步扩展

public class Car<T extends String> 
Run Code Online (Sandbox Code Playgroud)

我知道什么是最终我知道它是有效的,因为只有可能的价值T can be String我想知道警告.

axt*_*avt 13

如果实际问题是"为什么允许",那么想象一下将final关键字添加到现有类时的情况.我认为你不希望这个改变打破其他使用这个类作为泛型边界的现有代码,因为它仍然是完全合法的.这就是为什么编译器在这种情况下不会发出错误的原因.

从另一方面来说,如果你意外地将final类作为通用界限,你会被告知,因为这样的结构没有意义.这就是编译器发出警告的原因.

实际上,通常的做法是用警告来标记合法但毫无意义的结构.