Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型嵌套类型参数_Java_Generics - Fatal编程技术网

Java泛型嵌套类型参数

Java泛型嵌套类型参数,java,generics,Java,Generics,我有一个这样定义的类: 公共类AddRecordsToolbar 扩展抽象工具栏 我的IDEIntelliJ IDEA声明为合法。我觉得它看起来和感觉都不对。 我想这样声明: 公共类AddRecordsToolbar 扩展抽象工具栏 然而,由于与Javas类型擦除有关,这种语法是非法的 D扩展IDataSource是超类所必需的。 我的类正在使用Serializable进行深度复制。因此,T扩展了可序列化性 现在我们来讨论这个问题:如果我指定T extends Serializable作为我的类

我有一个这样定义的类:
公共类AddRecordsToolbar
扩展抽象工具栏

我的IDE
IntelliJ IDEA
声明为合法。我觉得它看起来和感觉都不对。 我想这样声明:
公共类AddRecordsToolbar
扩展抽象工具栏

然而,由于与Javas类型擦除有关,这种语法是非法的

D扩展IDataSource
是超类所必需的。
我的类正在使用Serializable进行深度复制。因此,T扩展了可序列化性


现在我们来讨论这个问题:如果我指定
T extends Serializable
作为我的类的第二个类型参数,它是否还会对
D
强制执行
T extends Serializable

回答您的问题,是的

一般参数的顺序只在你的脑海中出现

如果我们将该实施重新表述为:

public class AddRecordsToolbar<T extends Serializable, D extends IDataSource<T>> extends AbstractToolbar<D, T>
public类AddRecordsToolbar扩展了AbstractToolbar
你不会感到惊讶,看起来应该是这样的


我将尝试在Java语言规范中找到对此的解释(当它起作用时),但目前它是这样的

回答你的问题,是的

一般参数的顺序只在你的脑海中出现

如果我们将该实施重新表述为:

public class AddRecordsToolbar<T extends Serializable, D extends IDataSource<T>> extends AbstractToolbar<D, T>
public类AddRecordsToolbar扩展了AbstractToolbar
你不会感到惊讶,看起来应该是这样的


我将尝试在Java语言规范中找到对此的解释(当它起作用时),但目前它是这样的

我相信java语言规范的第8.1.2节已经提到了这一点:

类的类型参数的作用域是 类,包括类型参数节本身。因此,类型 参数可以显示为其自身边界的一部分,也可以显示为的边界 在同一节中声明的其他类型参数


我相信java语言规范的第8.1.2节已经提到了这一点:

类的类型参数的作用域是 类,包括类型参数节本身。因此,类型 参数可以显示为其自身边界的一部分,也可以显示为的边界 在同一节中声明的其他类型参数

对。第二个参数中的“T”与第一个参数中的T相同。否则,世界上没有任何东西是可行的

这意味着

class IFoo extends IDataSource<String>{};
AddRecordsToolbar<IFoo, Integer> x;
类IFoo扩展了IDataSource{};
AddRecordsToolBarX;
这是违法的。Integer和String都是可序列化的,但是AddRecordsToolbar的声明表示数据源必须是第二个参数中数据类型的源。第二个参数表示它必须是可序列化的。

是。第二个参数中的“T”与第一个参数中的T相同。否则,世界上没有任何东西是可行的

这意味着

class IFoo extends IDataSource<String>{};
AddRecordsToolbar<IFoo, Integer> x;
类IFoo扩展了IDataSource{};
AddRecordsToolBarX;
这是违法的。Integer和String都是可序列化的,但是AddRecordsToolbar的声明表示数据源必须是第二个参数中数据类型的源。第二个参数表示它必须是可序列化的