Java是否根据结果假定类型?
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
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是的,没错