@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,以便没有人可以修改它的价值。
我认为在这种情况下不可能宣布决赛。
我的问题是,在完成本课程后,如何在没有最终声明的情况下防止意外更改。
谢谢!
答案 0 :(得分:4)
在引用的情况下将其声明为final
意味着它不能被重新分配,但仍然可以修改内部状态(相应于类接口)。但是,请记住Java中的字符串是不可变的......
执行所需操作的另一种方法是将其声明为私有,然后定义public getter
和否 setter
。
如果目标是在引导期间通过从某处读取配置值来初始化它,这将有所帮助。
答案 1 :(得分:2)
你不能将变量设为final,但你可以将其设为私有,这样只有这个类可以直接读取和写入。
然后提供一个公共getter,以便其他类可以读取它但不写入它的值。
现在,作为此类的实现者,您不应更改其值。
此外,您不希望它是静态的,因为每次实例化此类时您都会更改该值。
答案 2 :(得分:1)
由于您正在使用@PostConstruct,因此无法使其成为最终版本。这意味着该类被实例化,然后,由于@PostConstruct注释,Spring为其分配了一些值。正如其他人所说,你必须把它变成私人的,只是提供一个吸气剂,而不是一个吸气剂。