java - 用另一个类的静态最终变量实例化一个类的一部分静态最终变量总是安全的吗?
问题描述
我有一个模型,它包含一个公共的最终静态变量,我想用它来从另一个类(一个 Spring@service
类)实例化一个私有的最终静态变量,例如
public class MyClass {
public static final String MY_CLASS_MSG = "My Class";
}
@Service
public class MyService {
private static final String MY_SERVICE_MSG = "My Service" + MyClass.MY_CLASS_MSG;
}
我可以始终保证MY_SERVICE_MSG
始终正确实例化吗?
解决方案
是的。在一般情况下,类是延迟加载的,这样做时发生的第一件事是运行静态初始化程序/评估静态属性,这本身将触发任何包含这些静态初始化程序或属性引用的属性的类的加载。
正如 ruakh@ 所指出的,当常量的定义是纯静态的(即不涉及任何方法调用)时,编译器有特殊的规则。在这种情况下,编译器本身可以评估常量,这有时是必要的(例如,如果此值是在注释字段中的引用,则必须静态处理)。
无论如何,据我所知,您所做的事情永远不会有问题。你担心什么?
推荐阅读
- python - numpy 距离矩阵,在没有 [i,j] 和 [j,i] 的情况下按值顺序迭代索引
- javascript - 如何知道哪个按钮重定向到页面
- python - 是否有使用 python 控制台在 Blender 中安装 tensorflow 的正确方法?
- java - 从 dynamoDB 表中删除数据时出错
- java - java.time 比较不一致
- python-3.x - 如何通过 PyTorch 计算图输出损失梯度反向传播路径
- r - 在 R 中创建数据框导入多张工作表
- scala - 运行 TPCDS 基准数据集时出现 Spark 错误 - 找不到 dsdgen
- python - 为什么返回 [],而不是 ["stuff"]?
- reactjs - 边距底部作为键盘高度