java - 无法为最终变量 'name' 赋值

标签 java intellij-idea

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

此代码有效:

package com.company;

public class Person {

    private final String name;

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

这个没有。 (即使我摆脱了 IO 代码并硬编码分配给名称的值)

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

但是,更好的选择可能会注入(inject)您需要的值(value)。

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

关于java - 无法为最终变量 'name' 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52628289/

相关文章:

java - Intellij IDEA 文件的不同配色方案

intellij-idea - 为什么 Intellij 在复制文件时执行 "hg copy"?

java - Spring 可选参数 int

java - Controller @RequestMapping URL 返回 404 未找到

java - 如何在Java中对Float Map的分数部分进行排序

debugging - 在 Intellij Idea 调试器中查看 unicode 字符串

intellij-idea - 添加自定义代码生成器

java - Eclipse 插件建议替换已弃用的功能警告

Java EE - Web 服务器如何处理长时间运行的 http 请求

java - 如何更改 Intellij 中 catch 语句的速度模板