【问题标题】:How does java type inference work?java 类型推断是如何工作的?
【发布时间】:2015-07-20 04:25:50
【问题描述】:

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

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

如果这个方法是在我自己的不可实例化的 util 类中实现的,那么它可以用作创建地图实例的静态工厂方法,对吗?

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

然后会返回一个新的 HashMap,其中包含整数键和字符串值作为其条目,对吗? 如果是,编译器和VM是如何实现map的key和entry的类型的?

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

【问题讨论】:

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

标签: java types static-methods


【解决方案1】:

您问“Java 是如何做到的”。 Java 是在语言规范中定义的,该规范并未规定规范的实现方式。因此,选择解决方案实际上取决于实施。因此,如果您真的想知道特定编译器或解释器如何实现类型推断,我怀疑这需要熟悉该工具的人来解决。

如果您的问题真的是“规则是什么”,那么您会发现它们在 specification itselfJava API documentationstandard Java tutorial 中得到了很好的解释(形式越来越少) .

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

【讨论】:

  • 你是对的。我想我是担心错了。:(
猜你喜欢
  • 2021-07-03
  • 2012-10-14
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
相关资源
最近更新 更多