System.setProperty还是public static变量?

3
我了解到System.setProperty(“key”,“value”)System.getProperty(“key”)用于保存和检索系统属性和用户定义的属性。设置的值可以在应用程序中的任何地方访问。
此外,我知道当变量声明为publicstatic时,它变成了常量,并且可以在应用程序中的任何地方使用。
我想知道这两个选项哪个更有优势和更好。我能想到的一个方面是,当我们想要在xml文件中检索值[使用$ {key}]时,System.setProperty非常有用。使用public static变量无法实现相同的功能。
我的问题是:
1.还有其他好处吗? 2.哪个选项更好? 3.在什么情况下应该使用System.setProperty/getProperty和public static变量?
提前感谢您的帮助。

1
似乎很笼统,但依我之见不要以这种方式使用System.getProperty: 如你所说,你可以创建一个带有public static final变量的常量类。你还可以定义一个属性文件,并将其映射为具有键值的对象... - Jordi Castilla
谢谢您的回复,我完全同意我们可以使用properties文件或Map [实际上,这就是我这些年一直在做的]。但是,我没有看到一个具体的理由,为什么不应该使用System.getProperty。请给予建议。谢谢。 - Andy
1
你可以这样做,但这是对 System.getProperty 的误解。它应该用于存储系统的属性。 - Jordi Castilla
2个回答

0
当你运行Java程序时,实际上是启动了一个JVM实例。该实例将具有其自己的系统属性,您可以在其中放置属性。当您运行另一个程序时,它将具有自己的系统属性。
Properties对象是哈希表的子类型,并且也是线程安全的。但是,如果要使用公共静态变量,则还必须处理多线程程序中的同步访问。

1
谢谢您的回复。我理解了您的观点,但我的问题是,使用System.setProperty/getProperty来存储和检索键值对而不是使用声明为public和static的Map或Properties,这是否是一种好的做法? - Andy

0

Setter 可以进行进一步的测试。例如针对 null 进行测试,针对错误值进行测试等...

通常情况下 Setter 是更好的选择,然而,一个没有 Setter 的类可能会更好,不要给用户破坏你的程序的方法。

public static Variable variable;

//In other file
variable = null; 

而且公共静态变量根本不是线程安全的!!!(除非它是原子的)

除非涉及到我真正希望被频繁更改的东西,比如Vector2D/3D,我从不使用公共静态变量(在这种情况下,它也不是公共静态的,因为它不是静态的)。此外,我只是这样做是因为用户不能将x、y、z设为空值,因为它是浮点数/整数。通常我会使用符合我的需求的方法,而不是简单的设置器。

(例如:虽然不是很好的例子,但我认为它展示了我的意思。而不是使用Person.setState(State.EATING),使用Person.eat())


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接