我正在看一个差异文件,看到了以下代码:
public interface Vector<T extends Vector>
被以下代码替换:
public interface Vector<T extends Vector<T>>
我头缠不住,有什么区别?它们的工作方式有何不同?
这两个声明之间的区别在于,第一个声明产生编译器警告,而第二个则不。这是因为泛型类型应始终与参数一起使用。
该声明确保了X如果实现Vector,则必须是X的Vector:
class X implements Vector<X> {
...
其他任何事情都会产生编译器错误。
实际上,在JDK中使用了这样的构造:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {
...
这意味着当我们声明枚举X时(隐式)扩展 Enum<X>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句