Java 泛型嵌套类型参数

标签 java generics

我有一个类定义如下:
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/

相关文章:

java - 在Java中,当另一个音频文件开始使用key_events时,如何停止前一个音频文件

java - Java 中的字符位

java -\n 有什么等价物吗?

delphi - 如何使用 TMyRecord 中的通用子列表释放通用 TList<TMyRecord>

java - 为什么设置<?允许扩展 Foo<?>>,但不允许 Set<Foo<?>>

c# - 如果缺少元素,如何处理失败的 LINQ 表达式

java - 如何为 XStream 使用 StAX 而不是 XPP?

java - 是什么导致我的结果打印结果与应有的相反?

java - 如何在接口(interface)中定义一个方法,该方法可以返回任何类型的列表,而不引发未经检查的赋值警告?

C# - 从一元类型的方法(或类)创建并返回多类型泛型