java.lang.System 类定义了一些well-known properties。
例如,您可以通过查找“java.io.tmpdir”属性来获取JVM的临时目录:
... = System.getProperty("java.io.tmpdir");
我不明白为什么这些属性没有被定义为常量(例如在java.lang.System类中)。与使用文字字符串相比,这将更不容易出错。换句话说,我希望能够做到这一点:
... = System.getProperty(System.JAVA_IO_TMPDIR);
为什么没有这样做的任何想法?它甚至可以在未来的Java版本中添加,而不会破坏向后兼容性。或者我错过了一些明显的东西?
答案 0 :(得分:9)
我的猜测是Sun不想提交一组预定义的系统属性。如果它们没有被定义为容器,那么它们可以随时添加系统属性(即使它们只发布JDK的增量版本,如1.4.1到1.4.2)。
修改强>
任何预定义的常量都必须被视为API的一部分。因此,即使改变常量的数量也是API的变化。通过不定义任何常量,允许Sun在不引入API更改的情况下定义新的系统属性。
答案 1 :(得分:9)
System.getProperties()下记录的所有属性都是标准化的 - 每个Java SE实现都必须提供它们。 Java 7没有理由不能为这些标准属性名称引入常量。它不会阻止引入新的属性。我认为没有人认为值得付出努力(即使是对核心Java API的微不足道的补充也必须通过我认为的过程。)
答案 2 :(得分:4)
最近为系统属性引入了令人敬畏的Google Guava library常量:请参阅http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/StandardSystemProperty.html
答案 3 :(得分:1)
为了完整性,Apache commons lang有SystemUtils类,它提供了常见的常量和预定义的方法。
这已存在好几年了,很有可能你已经使用了公共场所(2或3)。
SystemUtils.getUserHome();
SystemUtils.getJavaIoTmpDir();
SystemUtils.JAVA_IO_TMPDIR;
SystemUtils.USER_HOME;
答案 4 :(得分:-5)
"literal"
和LITERAL
之间有什么区别?
两个字符:"
和"
。
当LITERAL
同样有效时,无法理解为什么还要创建一组复杂的"literal"
。