小编aai*_*zza的帖子

Java8中的模糊过载 - 是ECJ还是javac对吗?

我有以下课程:

import java.util.HashSet;
import java.util.List;

public class OverloadTest<T> extends  HashSet<List<T>> {
  private static final long serialVersionUID = 1L;

  public OverloadTest(OverloadTest<? extends T> other) {}

  public OverloadTest(HashSet<? extends T> source) {}

  private OverloadTest<Object> source;

  public void notAmbigious() {
    OverloadTest<Object> o1 = new OverloadTest<Object>(source);
  }

  public void ambigious() {
    OverloadTest<Object> o2 = new OverloadTest<>(source);
  }
}
Run Code Online (Sandbox Code Playgroud)

这在JDK 7的javac以及eclipse(兼容性设置为1.7或1.8)下编译得很好.但是,尝试在JDK 8的javac下编译,我收到以下错误:

[ERROR] src/main/java/OverloadTest.java:[18,35] reference to OverloadTest is ambiguous
[ERROR] both constructor <T>OverloadTest(OverloadTest<? extends T>) in OverloadTest and constructor <T>OverloadTest(java.util.HashSet<? extends T>) in OverloadTest match …
Run Code Online (Sandbox Code Playgroud)

java eclipse javac jls ecj

15
推荐指数
1
解决办法
755
查看次数

JDK 9是否应该允许Lambda Expression实例化,在重写方法中引用最终字段?

我一直在使用新的Eclipse Neon,我的一些代码开始直接给我错误.
这是很奇怪,我在第一,但后来我发现这里的霓虹灯欧洲法院(Eclipse的Java编译器)采用JDK 9提前释放编译器的态度.
我没有遇到该链接中的相同问题,而是我将在此解释的另一个问题.

Lambda Expression声明作为字段出现问题

这是一个测试类,它在Eclipse Neon,JDK 9编译器和JDK 8编译器(不是以前版本的Eclipse)中给出了编译错误.

public class Weird
{
    private final Function<String, String> addSuffix =
        text -> String.format( "%s.%s", text, this.suffix );

    private final String suffix;

    public Weird( String suffix )
    {
        this.suffix = suffix;
    }
}
Run Code Online (Sandbox Code Playgroud)

鉴于上面的代码,在所述误差线4suffix是:

????????????????????????????????????????????????????????????
? Compiler ?                     Error                     ?
????????????????????????????????????????????????????????????
? ECJ      ? Cannot reference a field before it is defined ?
? JDK 9    ? error: illegal forward reference …
Run Code Online (Sandbox Code Playgroud)

java eclipse ecj java-9 eclipse-neon

8
推荐指数
1
解决办法
480
查看次数

标签 统计

ecj ×2

eclipse ×2

java ×2

eclipse-neon ×1

java-9 ×1

javac ×1

jls ×1