无法为最终变量“名称”赋值

2023-11-30

为什么不是Java允许我间接初始化最终变量?我不明白为什么它不起作用,我的意思是该方法将始终运行,那么如果直接初始化或通过方法初始化有什么区别?

这段代码的工作原理:

package com.company;

public class Person {

    private final String name;

    public Person() {
        name = "bob";
    }
}

这个没有。 (即使我去掉 IO 代码并对分配给 name 的值进行硬编码)

package com.company;

import java.util.Scanner;

public class Person {

    private final String name;

    public Person() {
        askName();
    }

    public void askName() {
        Scanner scanner = new Scanner(System.in);
        name = scanner.nextLine();
    }
}

final字段必须在构造函数中设置。您可以执行以下操作。

import java.util.Scanner;

public class Person {

    private final String name;

    public Person() {
        name = askName();
    }

    public static String askName() {
        Scanner scanner = new Scanner(System.in);
        return scanner.nextLine();
    }
}

然而,更好的选择可能会注入您需要的价值。

import java.util.Scanner;

public class Person {

    private final String name;

    public Person(String name) {
        this.name = name;
    }

    public static Person askName() {
        Scanner scanner = new Scanner(System.in);
        return new Person(scanner.nextLine());
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法为最终变量“名称”赋值 的相关文章

随机推荐