使用Java系统属性的最佳实践

wil*_*ood 9 java properties

我们的代码使用了很多系统属性,例如'java.io.tmpdir','user.home','user.name'等.我们没有为这些定义任何常量(我认为也不是java)或者处理它们的任何其他聪明之处,因此它们在整个代码中都是乱七八糟的文本.

String tempFolderPath = System.getProperty("java.io.tmpdir");
Run Code Online (Sandbox Code Playgroud)

每个人如何使用系统属性?

Bil*_*ard 8

我会像处理代码中的任何其他字符串常量一样对待它,并为它定义一个常量变量.当然,在这种情况下,"java.io.tmpdir"不太可能改变,但你永远不会知道.(我并不是说Sun可能会改变"java.io.tmpdir"的含义,或者它指向的系统属性,但是您可能会改变您对需要阅读的系统属性的看法.)

如果你只使用一个类中的特定属性,那么我将在该类中定义常量.

private final String TEMPDIR = "java.io.tmpdir";
Run Code Online (Sandbox Code Playgroud)

如果您在不同的类中使用相同的属性,则可能需要定义自己的静态类来保存最常用的常量.

public final Class Prop {
    public static final String TEMPDIR = "java.io.tmpdir";
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要使用该常量的任何地方只需使用它

System.getProperty(Prop.TEMPDIR);
Run Code Online (Sandbox Code Playgroud)


a3.*_*ity 5

Apache Commons Lang包提供的SystemUtils解决了这个问题.

SystemUtils为大多数系统属性定义了常量,可以通过查找获得,例如:

import org.apache.commons.lang3.SystemUtils;

class Something
{
    public static void main(String[] args){     
        System.out.println(SystemUtils.JAVA_IO_TMPDIR);
    }
}
Run Code Online (Sandbox Code Playgroud)

也许,这是一种更清洁的方式.