Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 使用genric和position的区别_Java_Oop_Generics_Computer Science - Fatal编程技术网

Java 使用genric和position的区别

Java 使用genric和position的区别,java,oop,generics,computer-science,Java,Oop,Generics,Computer Science,我有以下代码 Gen_Class<Integer> test = new Gen_Class<Integer>(); Gen_类测试=新Gen_类(); 那么,开头的和结尾的有什么区别呢。 为什么我们要写两次呢 有什么好处吗? 如果我们没有在开头添加,会发生什么?如果您使用的是Java 7或8,您可以省略第二个整数,如下所示: Gen_Class<Integer> test = new Gen_Class<>(); Gen_类测试=新Gen_

我有以下代码

Gen_Class<Integer> test = new Gen_Class<Integer>();
Gen_类测试=新Gen_类();
那么,开头的和结尾的有什么区别呢。 为什么我们要写两次呢

有什么好处吗?
如果我们没有在开头添加,会发生什么?

如果您使用的是Java 7或8,您可以省略第二个整数,如下所示:

Gen_Class<Integer> test = new Gen_Class<>();
Gen_类测试=新Gen_类();
那么,开头和结尾的区别是什么呢。为什么我们要写两次呢

本质上没有“区别”;您只需在两侧指定完整的类型名称。类型已参数化,因此如果没有类型参数,则类型名称不完整。然而,正如@JigarJoshi在他的评论中所指出的,Java 7在许多情况下都可以推断类型参数,允许您只需在赋值的右侧编写空的
括号,以及一些方法参数

有什么好处吗?如果我们一开始没有添加,会发生什么

如果在任何一侧都不使用类型参数,则指定的是原始类型,而不是参数化类型。其后果取决于你是不考虑左派、右派,还是两者兼而有之


如果将它们保留在左侧,则您的
Gen\u类
将成为
Gen\u类
,这实际上与
Gen\u类
相同。这改变了语义;以前可能要求您传递
整数的地方现在可以接受任何
对象
(可能会或可能不会导致问题),而暴露
整数
值的方法和字段现在可以暴露
对象
值。

在java 7之前,您必须在两侧指定类型,对于Java7以后的版本,您可以忽略右侧类型规范,只需将其保留为
很好的解释:)