使用系统属性在 Java 中存储全局变量是不好的做法吗?

Arm*_*and 5 java system-properties

它们是否有任何潜在问题(安全性、性能)或与使用System.getProperty()/System.setProperty()在 Java 中存储应用程序范围的变量相关的普遍不良情绪?

Ste*_*n C 5

是的,这是不好的做法,原因有很多:

  • 性能:系统属性对象是引擎盖下的哈希表。获取和设置可能比普通的 getter 或 setter 方法慢 2 个数量级。

  • 类型安全:除非你的变量都是字符串,否则你会遇到属性值可能类型错误的问题,从而导致运行时错误、复杂性等。

  • 类型转换成本:例如,必须在每个 set 和 get 操作上转换整数值属性。不便宜。

  • 可追溯性:找到对真实变量的引用比对命名系统属性更容易。

  • 安全限制:对系统属性的访问由安全管理器控制。

当然,这是不必要的。如果你真的需要“全局”变量,static变量就可以很好地完成工作。如果您确实需要使用Properties对象来保存应用程序的(非系统)属性,请使用该Properties对象的单独实例。


Pet*_*rey 4

这是一个坏主意,因为您可能会对全局可访问变量产生冲突的要求。管理对此类的依赖也非常困难。只有在确实没有其他选择的情况下我才会这样做。