我是否在Java9中发现了编译器错误?

我是否在Java9中发现了编译器错误?,java,eclipse,compiler-errors,java-9,Java,Eclipse,Compiler Errors,Java 9,Eclipse第11行出现编译错误 类型不匹配:无法从列表转换为列表 我相信这段代码应该编译,我创建了一个简短的示例来演示这个问题: 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[] arg

Eclipse第11行出现编译错误

类型不匹配:无法从
列表
转换为
列表

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

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);
  }

}
import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入java.util.function.function;
公共类JavaCompilerBug{
公共静态void main(字符串[]args){
List VAL=Arrays.asList(“1”、“2”、“3”);
列出foos=map(vals,s->Foo.with(last(vals));
}
公共静态类Foo{
具有(字符串值)的公共静态Foo{
返回新的Foo();
}
具有(Foo值)的公共静态Foo{
返回新的Foo();
}
}
公共静态列表映射(列表输入、功能){
List ret=new ArrayList();
对于(元素:输入){
ret.add(function.apply(element));
}
返回ret;
}
公共静态T last(列表c){
返回c.get(c.size()-1);
}
}

问题实际上在于Eclipse,而不是Java编译器。这个问题已经在这里提交给Eclipse:

问题实际上是Eclipse的问题,而不是Java编译器的问题。此问题已提交给Eclipse:

这似乎是一个推断错误(发生在Eclipse中)。将显式类型见证与
map
last
一起使用可解决此问题。不管怎样,使用
javac编译都很好。使用9.0.4和10版本的javac编译都很好。如果使用javac,这一定是eclipse的问题。我在使用eclipse时一直遇到类型推断失败(几乎到了规范被证明是正确的程度)。但是我太懒了,不能提交bug报告,所以请随意回答问题,并提供一个指向您正在制作的bug报告的链接。当尝试在Java编译器中查找bug时,请确保您实际使用了Java编译器;)这似乎是一个推理错误(发生在eclipse中)。将显式类型见证与
map
last
一起使用可解决此问题。不管怎样,使用
javac编译都很好。使用9.0.4和10版本的javac编译都很好。如果使用javac,这一定是eclipse的问题。我在使用eclipse时一直遇到类型推断失败(几乎到了规范被证明是正确的程度)。但是我太懒了,不能提交bug报告,所以请随意回答问题,并提供一个指向您正在制作的bug报告的链接。当尝试在Java编译器中查找bug时,请确保您实际使用了Java编译器;)该问题已在Eclipse via中修复(自4.8 M4以来光子版本中提供的修复)。该问题已在Eclipse via中修复(自4.8 M4以来光子版本中提供的修复)。