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

5
以下代码在第1行处出现编译错误,错误信息如下:

空白final字段可能未被初始化

我的问题是为什么会出现这个错误,因为我已经在构造函数中初始化了该字段。
    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
你已经得到了最终字段,但没有任何东西来设置它。 - Akshay
3
这个错误实际上是说“第一行”吗? - Steve Smith
@SteveSmith--我有提到过这个吗?我说的是第1行。 - T-Bag
2
我只是想澄清一下,你遇到的问题是你认为的问题,而不是其他问题,因为你的代码显示问题实际上出现在第10行(大约)。 - Steve Smith
1个回答

9
在对象创建过程中,实例初始化程序(即对实例变量和初始化块的赋值)在构造函数运行之前执行,因此它们需要在那时被初始化。以下代码应该可以正常工作:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接