变量最终

时间:2015-09-22 06:16:03

标签: java final

@Component
public class PathConstant {

    @Value("#{systemProperties['system.uploadDir']}")
    public String tempPath;

    public static String FILE_UPLOAD_PATH; // <------------------

    @PostConstruct
    public void initConstant() {
        FILE_UPLOAD_PATH = tempPath;
    }
}

我想最后制作FILE_UPLOAD_PATH,以便没有人可以修改它的价值。

我认为在这种情况下不可能宣布决赛。

我的问题是,在完成本课程后,如何在没有最终声明的情况下防止意外更改。

谢谢!

3 个答案:

答案 0 :(得分:4)

在引用的情况下将其声明为final意味着它不能被重新分配,但仍然可以修改内部状态(相应于类接口)。但是,请记住Java中的字符串是不可变的......

执行所需操作的另一种方法是将其声明为私有,然后定义public getter setter。 如果目标是在引导期间通过从某处读取配置值来初始化它,这将有所帮助。

答案 1 :(得分:2)

你不能将变量设为final,但你可以将其设为私有,这样只有这个类可以直接读取和写入。

然后提供一个公共getter,以便其他类可以读取它但不写入它的值。

现在,作为此类的实现者,您不应更改其值。

此外,您不希望它是静态的,因为每次实例化此类时您都会更改该值。

答案 2 :(得分:1)

由于您正在使用@PostConstruct,因此无法使其成为最终版本。这意味着该类被实例化,然后,由于@PostConstruct注释,Spring为其分配了一些值。正如其他人所说,你必须把它变成私人的,只是提供一个吸气剂,而不是一个吸气剂。