5

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

4

6 回答 6

5

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

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

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

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

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

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

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

于 2012-10-08T14:38:42.923 回答
4

这是一个坏主意,因为您可能会获得对全局可访问变量的冲突要求。管理你对这个类的依赖也非常困难。如果真的没有其他选择,我只会这样做。

于 2012-10-08T12:52:40.217 回答
3

不是一个好主意。顾名思义,它用于系统属性。
查看您的代码的人很难理解它们是全局变量而不是与系统相关的设置。

如果您真的想使用全局变量,我认为使用单例或静态变量会更好。

于 2012-10-08T12:59:45.420 回答
2

有更好的选择。您至少可以使用标准属性加载器机制并加载 RessourceBundle 并写入/读取该 Bundle 而不是访问系统属性。

第三方可以在您不知情的情况下修改系统属性,并且您对此没有太多控制权。

于 2012-10-08T12:53:21.427 回答
1

我建议使用属性文件并使用Properties该类。

File file = new File("your.properties");
FileInputStream input = new FileInputStream(file);

Properties properties = new Properties();
properties.load(input);

.getProperty在需要时使用。我认为全局系统变量是个坏主意。

于 2012-10-08T13:01:19.757 回答
0

全局变量通常是设计缺陷。您的组件应该是独立的,不需要任何全局状态。相反,使用公共静态字段。

于 2012-10-08T12:54:24.117 回答