java类型推断如何工作?

时间:2015-07-20 04:25:50

标签: java types static-methods

有人可以解释以下语法的工作原理吗?

public static <K, V> HashMap<K, V> getMap(){
    return new HashMap<K, V>();
}

同样,如果这个方法是在我自己的非可实例化的util类中实现的,那么它可以用作创建map实例的静态工厂方法,对吧?

Map<Integer, String> myMap = MyUtil.getMap();
然后

会返回一个新的HashMap,其中包含Integer键和String值,我是对的吗? 如果是这样,编译器和VM如何实现键的键和条目类型?

如果有人能解释Java是如何做到的,我真的很感激。

1 个答案:

答案 0 :(得分:4)

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

如果您的问题确实是“规则是什么”,那么您会在specification itselfJava API documentationstandard Java tutorial中找到相当好的解释(在降低正式程度)。

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