我有一个类定义如下:
public class AddRecordsToolbar<D extends IDataSource<T>, T extends Serializable>
extends AbstractToolbar<D, T>
我的 IDE IntelliJ IDEA
声明为合法。对我来说,它看起来和感觉都是错误的。
我想这样声明:
public class AddRecordsToolbar<D extends IDataSource<T extends Serializable>, T>
extends AbstractToolbar<D, T>
然而,由于与 Java 类型删除有关,该语法是非法的。
D extends IDataSource<T>
父类(super class)需要。
我的类(class)正在使用可序列化来进行深层复制。因此 T 扩展了 Serialized。
现在讨论问题:如果我指定 T extends Serializable
作为我的类的第二个类型参数,它仍然会强制 T extends Serializable
对于 D
还有吗?
最佳答案
回答你的问题,是的。
通用参数的顺序仅在您的脑海中。
如果我们将该实现改写为:
public class AddRecordsToolbar<T extends Serializable, D extends IDataSource<T>> extends AbstractToolbar<D, T>
你不会那么惊讶,看起来应该是这样的。
我会尝试在 Java 语言规范中找到对此的解释(当它起作用时),但现在就是这样。
关于Java 泛型嵌套类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9120116/