Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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 - Fatal编程技术网

Java是否根据结果假定类型?

Java是否根据结果假定类型?,java,Java,Java中有一个代码: import java.util.HashMap; import java.util.Collection; import java.util.Map; public class Main { public static void main(String[] args) { Map<Integer, String> langMap = new HashMap<>(); langMap.put(1, "Java&quo

Java中有一个代码:

import java.util.HashMap;
import java.util.Collection;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
    Map<Integer, String> langMap = new HashMap<>();
    langMap.put(1, "Java");
    langMap.put(2, "C#");
    Collection<String> values = langMap.values();
  }
}
import java.util.HashMap;
导入java.util.Collection;
导入java.util.Map;
公共班机{
公共静态void main(字符串[]args){
Map langMap=新的HashMap();
langMap.put(1,“Java”);
langMap.put(2,“C#”);
集合值=langMap.values();
}
}
最后一行代码中有
集合
。因为类型是基于从langMap分配的值而假定的,所以不是不必要的吗?

来自HashMap返回
集合的
values()
方法

V是一个泛型,它将被推断为您声明的HashMap值的类型

var
关键字 在Java 10及更高版本中,您可以使用
var
语法编写:

var values=langMap.values()

…并且将隐式推断
集合的类型。这里它将被推断为
Collection
,因为您将
Map
声明为
Map

看这个

另见

不是没有必要吗

不,这是必需的:如果没有
,变量的类型将是
集合
,这是一种原始类型

我想Java可以为类似于
Collection
这样的上下文设置一个符号,类似于,但是它没有


您必须在支持它的语言版本(11及更高版本)中使用
Collection
,或
var

说它不必要是不正确的,因为根据您的代码,您正试图从map中获取值集(集合)。因此要定义此集合的数据类型(即集合将要存储的信息的数据类型)将防止任何进一步的错误并使其成为干净的。否则,它可能会显示格式异常。 例如,当您想要存储一个名为“Map”的Map值,其中包含整数数据类型的值时,以这个例子为例

//获取地图的所有值

集合值=map.values()

//这会将您的值集合转换为任何其他集合 //就像我在这里做的ArrayList一样

ArrayList listOfValues=新的ArrayList(值)

*****这行代码取自我的GitHub repo链接,如下所示 第26行,第27行。

什么意义上的“不必要”?
langMap.values()的类型
集合
,因为这是该方法的返回类型。如果您需要的话,Java的最新版本可以about@AndyTurner他的问题是,如果给定指定的
langMap.values()
,声明
Collection values
隐式已知,那么为什么声明
需要
(我认为..)@阿库兹明尼赫:用背景符号会更清楚:)@akuzminykh是的,没错