空白的最终字段名称可能尚未初始化错误

时间:2017-06-28 09:29:08

标签: java

以下代码在line 1

给出了下面提到的编译错误
  

空白的最终字段名称可能尚未初始化

我的问题是为什么会出现这个错误,因为我已经在其构造函数中初始化了字段。

    public class Test1 {
    private final String name;

    public Test1() {
        name = "abc";
    }

    @SuppressWarnings("rawtypes")
    private final Function fs = n -> {
        System.out.println(this.name);// Line 1
        return n;

    };

    public static void main(String[] args) {
        new Test1();
    }
}

1 个答案:

答案 0 :(得分:8)

在对象创建期间,实例初始化器(即对实例变量和初始化块的赋值)在构造函数运行之前执行,因此,它们需要在那时初始化值。以下应该工作:

public class Test1 {
    private final String name;

    public Test1() {
        name = "abc";
        fs = n -> {
            System.out.println(this.name);// Line 1
            return n;

        };
    }

    @SuppressWarnings("rawtypes")
    private final Function fs;

    public static void main(String[] args) {
        new Test1();
    }
}