![]() |
1
9
我会将其视为您在代码中分散的任何其他字符串常量,并为其定义一个常量变量。当然,在这种情况下,“java.io.tmpdir”不太可能更改,但您永远不知道。(我并不是说Sun可能会改变“java.io.tmpdir”的含义,或者它指向什么系统属性,而是说你可能会改变你需要阅读什么系统属性的想法。) 如果你只在一个类中使用一个特定的属性,那么我会在该类中定义常量。
如果你在不同的类中使用相同的属性,你可能想定义一个自己的静态类来保存你最常用的常量。
然后,在任何需要使用该常量的地方,只需使用
|
![]() |
2
5
SystemUtils Apache Commons Lang包提供的解决方案解决了这个问题。 SystemUtils为大多数系统属性定义了常量,可以通过查找获得,例如:
也许,这是一种更干净的方法。 |
![]() |
3
4
如果你在多个地方使用它,写一个类来封装读取属性和其他属性可能是个好主意。 所以可能类似于:Configuration.getTemporaryDirectory() |
![]() |
4
4
由于问题标题非常宽泛,我将提出另一个在使用系统属性时应该考虑的好做法。访问系统属性可能会被拒绝
当你的代码约束敏感操作时,使用特权操作,这样即使恶意代码调用它,它也是安全的。
例如,在以下方法中使用特权操作是不安全的
但是,如果您有一种方法将应用程序的用户首选项保存到您选择的文件中,那么这可能是安全的。恶意调用者无法选择文件位置或其内容;这些是由您的代码指定的。因此,您的方法可以使用特权操作来允许非特权代码调用它。 |
![]() |
5
4
我认为在面向对象的软件中,你可能有一个对象(或一个方法)依赖于一个必须完成工作的目录。因此,您可以证明这种对构造函数或方法的依赖性。 之后,如果你需要该目录的默认值,并且默认值来自系统属性,你可以简单地创建一个工厂方法或构造函数/方法,并将较少的参数传递给另一个costructor/method a:
您不需要创建仅包含配置参数的“依赖磁铁”。 |
![]() |
6
1
我会把这些当作任何其他常数来对待,可能是
如果你用了很多,我甚至会考虑把它们分成
最后,我会认真考虑对属性名称本身进行命名空间设置,并使用标准的反向域名对包进行命名空间设置。这只是为了避免与第三方房产消费者发生冲突。 |
![]() |
7
0
在Java中,字符串是不可变的,这意味着内存空间中的同一对象不会被覆盖;每次都会创建一个新的字符串。目前投票率最高的建议是使用常数:
不幸的是,使用的常量是实际的属性键。这意味着每次您进行此调用时,都将创建一个新的String对象来保存该值。在我看来,你应该把常量作为调用本身的结果:
|
![]() |
MWRazer · 在类-C上具有作为属性的函数++ 2 年前 |
![]() |
Vopel · 添加隐藏的属性,除非该属性具有值 2 年前 |
![]() |
Shane Amare · 构造函数和对象构造之间的区别是什么? 2 年前 |