相关疑难解决方法(0)

以静态方式创建对象

谁能解释一下Java如何执行这段代码?我的意思是执行每个语句的顺序.

public class Foo
{
    boolean flag = sFlag;
    static Foo foo = new Foo();
    static boolean sFlag = true;

    public static void main(String[] args)
    {
        System.out.println(foo.flag);
    }
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

false
Run Code Online (Sandbox Code Playgroud)

java static

68
推荐指数
3
解决办法
2341
查看次数

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
查看次数

标签 统计

java ×2

ecj ×1

eclipse ×1

eclipse-neon ×1

java-9 ×1

static ×1