2016-12-02 12 views
0

Синглтон должен быть инициализирован параметром. Я хочу использовать статический блок для получения параметра из системных свойств вместо метода setter. Я не хочу использовать setter, потому что этот синглтон можно использовать одновременно, и я не хочу, чтобы сеттер был синхронизирован. Я не хочу использовать конструктор, потому что я использую enum, чтобы сделать его singleton, и перечисление не может определить экземпляры с параметром runtime.Хорошо ли использовать свойства системы в одноэлементном режиме на Java?

Есть ли причина, по которой я должен использовать установщик вместо системных свойств? Я знаю, что это означает еще одну вещь, чтобы следить за запуском приложения Java, которое не очень похоже на программу. Благодарю.

ответ

0

Вы правы. Свойства системы являются статическими, поэтому почему бы не сделать для них статические держатели? как пример вместо получения File.separator или line.sparator от System.getProperty каждый раз, когда я нуждаюсь в них я могу их так:

public class MyConstants { 

    public static final String FILE_SEPARATOR = System.getProperty("file.separator"); 
    public static final String LINE_SEPARATOR = System.getProperty("line.separator"); 

, а затем использовать их в качестве MyConstants.FILE_SEPARATOR или MyConstants.LINE_SEPARATOR

Это всего лишь вопрос стиля кода, который вы предпочитаете. В противоположность: нестатические сеттеры или конструкторы с параметрами, требуемыми, когда вы намереваетесь иметь разные экземпляры одного и того же класса с разными значениями в них. Статические сеттеры не часто требуются ... только когда используются фреймворки, такие как Spring, и/или фактические значения для атрибутов уровня класса не относятся к свойствам системы, но где-то в виде файлов .properties