java类型推断是如何工作的?

java类型推断是如何工作的?,java,types,static-methods,Java,Types,Static Methods,有人能解释一下下面的语法是如何工作的吗 public static <K, V> HashMap<K, V> getMap(){ return new HashMap<K, V>(); } publicstatichashmap getMap(){ 返回新的HashMap(); } 如中所示,如果该方法是在我自己的不可实例化的util类中实现的,那么它可以用作创建映射实例的静态工厂方法,对吗 Map<Integer, String> m

有人能解释一下下面的语法是如何工作的吗

public static <K, V> HashMap<K, V> getMap(){
    return new HashMap<K, V>();
}
publicstatichashmap getMap(){
返回新的HashMap();
}
如中所示,如果该方法是在我自己的不可实例化的util类中实现的,那么它可以用作创建映射实例的静态工厂方法,对吗

Map<Integer, String> myMap = MyUtil.getMap();
Map myMap=MyUtil.getMap();
然后将返回一个新的HashMap,其中包含整数键和条目的字符串值,对吗? 如果是这样,编译器和VM是如何实现映射的键和条目类型的


如果有人能解释一下Java是如何做到这一点的,我将不胜感激。

你会问“Java是如何做到这一点的”。Java是在一个语言规范中定义的,该规范不规定如何实现规范。因此,选择解决方案实际上取决于实现。所以,如果你真的想知道一个特定的编译器或解释器是如何实现类型推断的,我想需要熟悉这个工具的人来解决这个问题

如果你的问题真的是“规则是什么”,那么你会发现它们在中、中和中都得到了很好的解释


这是一个相当复杂的领域,有许多棘手的案例需要处理——事实上,需要正确理解三个过程(减少、合并和解决)。但是,如果您正在寻找一个简单的摘要,我会将其声明为“当实例化一个类或方法时,用可能最具体的类型替换每个泛型类型”。在您的例子中,将
K
替换为
Integer
V
替换为
String
是最具体的推理

你看了吗?@Codebender:那不是真的——试一试。@javabot:这就是文档将告诉你的。(顺便说一句,为我之前删除的评论道歉,我实际上认为这不会编译。最近使用了太多的语言…@javabot:那么你最好的办法就是说出你不理解的内容,在问题中,指的是你不理解的文档部分。(所以人们知道该为你澄清什么。)@AndyTurner:是的,但这只是一个明显的打字错误。你是对的。我想我担心错了(