Java 1.8.0_65的推断类型问题

时间:2015-11-05 19:45:13

标签: java generics java-8 type-inference

所以,我有以下代码:

public class Tester {
    public static void doAssert(Object foo, Object bar) {
    }

    public static void doAssert(Object[] foo, Object[] bar) {
    }

    public static <T> T getValue(String name, Function<String, T> covert) {
        return null;
    }

    public static void main (String[] args) {
        doAssert(getValue("", Double::valueOf), null);
    }
}

如果我用javac v1.8.0_05编译它,这很好用。在1.8.0_65下,我收到以下错误(与-Xdiags:verbose一起报告):

Tester.java:32: error: method doAssert in class Tester cannot be applied to given types;
            doAssert(null, getValue("", Double::valueOf));
                    ^
  required: Object[],Object[]
  found: <null>,Double
  reason: argument mismatch; inferred type does not conform to upper bound(s)
      inferred: Double
      upper bound(s): Object[],Object
1 error

如果我明确地将null参数转换为Double,或者删除了Object[]的{​​{1}}重载,则会消失。

所以...这是1.8.0_65或其他干预版本之一的回归,还是1.8.0_05过度宽松?为什么javac能够弄清楚它应该做什么?

(回复:关闭投票 - 对我而言,其他Q&amp; A如何重复是不明显的;链接的问题似乎不会解决方法重载问题,这是必需的重现这个问题。)

0 个答案:

没有答案