Почему Java не имеет констант для имен известных системных свойств?

Класс java.lang.System определяет число известных свойств.

Например, вы можете получить временную директорию JVM, просмотрев свойство java.io.tmpdir:

... = System.getProperty("java.io.tmpdir");

Я не понимаю, почему эти свойства не определены как константы (например, в классе java.lang.System). Это было бы намного менее подвержено ошибкам, чем использование литералов. Другими словами, я хотел бы иметь возможность сделать это:

... = System.getProperty(System.JAVA_IO_TMPDIR);

Любые идеи, почему это не было сделано? Его можно даже добавить в будущую версию Java, не нарушая обратной совместимости. Или я пропущу что-то очевидное?

Ответы

Ответ 1

Все свойства, описанные в System.getProperties(), стандартизированы - каждая реализация Java SE должна обеспечивать их. Нет причин, по которым Java 7 не может вводить константы для этих стандартных имен свойств. Это не помешало бы внедрению новых свойств. Я думаю, что это просто никто не думал, что это стоит усилий (даже тривиальные дополнения к основным API Java должны проходить через процессы, которые я думаю).

Ответ 2

Я предполагаю, что Sun не захотела зафиксировать предопределенный набор системных свойств. Если они не определены как константы, они могут добавлять свойства системы в любое время (даже если они только освобождают инкрементную версию JDK, например, от 1.4.1 до 1.4.2).

Edit:
Любые предопределенные константы должны рассматриваться как часть API. Таким образом, даже изменение количества констант - это изменение API. Не определяя никаких констант, Sun может определять новые системные свойства без внесения изменений API.

Ответ 4

Для полноты Apache commons lang имеет класс SystemUtils, который предоставляет общие константы и предопределенные методы.

Это существует с нескольких лет, и шансы хорошие, вы уже используете commons lang (2 или 3).

SystemUtils.getUserHome();
SystemUtils.getJavaIoTmpDir();
SystemUtils.JAVA_IO_TMPDIR;
SystemUtils.USER_HOME;

Ответ 5

Какая разница между "literal" и a LITERAL?

Два символа: " и ".

Не могу понять, зачем придумывать сложный набор LITERAL, когда "literal" работает так же хорошо.