【问题标题】:Did I find a compiler bug in java 9?我是否在 java 9 中发现了编译器错误?
【发布时间】:2018-03-24 17:43:31
【问题描述】:

我在 Eclipse 第 11 行遇到编译错误。

类型不匹配:无法从 List<Object> 转换为 List<JavaCompilerBug.Foo>

我相信这段代码应该可以编译,并且我创建了一个简短的示例来演示该问题:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;

public class JavaCompilerBug {

  public static void main(String[] args) {
    List<String> vals = Arrays.asList("1", "2", "3");

    List<Foo> foos = map(vals, s -> Foo.with(last(vals)));
  }

  public static class Foo {
    public static Foo with(String value) {
      return new Foo();
    }

    public static Foo with(Foo value) {
      return new Foo();
    }
  }

  public static <A, B> List<B> map(List<A> input, Function<A, B> function) {
    List<B> ret = new ArrayList<>();
    for (A element : input) {
      ret.add(function.apply(element));
    }
    return ret;
  }

  public static <T> T last(List<T> c) {
    return c.get(c.size() - 1);
  }

}

【问题讨论】:

  • 这似乎是一个推理错误(发生在 Eclipse 中)。使用带有maplast 的显式类型见证来解决问题。无论如何都可以使用javac 编译。
  • 从 9.0.4 和 10 都可以使用 javac 编译。
  • 这一定是eclipse的问题,那么如果它与javac一起工作。
  • 我一直在 Eclipse 中遇到类型推断失败(几乎到了可以证明规范的程度)。不过,我也懒得提交错误报告,所以请随意使用您正在制作的错误报告的链接自行回答问题。
  • 在尝试查找 Java 编译器中的错误时,请确保您实际使用了 Java 编译器;)

标签: java eclipse compiler-errors java-9


【解决方案1】:

问题实际上出在 Eclipse 而不是 Java 编译器上。此问题已在此处向 Eclipse 提交:https://bugs.eclipse.org/bugs/show_bug.cgi?id=532860

【讨论】:

  • 这个问题已经在 Eclipse 中通过 bugs.eclipse.org/515600 得到修复(从 4.8 M4 开始的 Photon 版本中提供了修复)。
猜你喜欢
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 2011-07-20
  • 2023-03-18
相关资源
最近更新 更多