2016-02-05 3 views
-1

У меня есть класс Util, отслеживающий важных системных переменных:Использовать перечисление как геттер?

public static final String REQUEST_ADDRESS = "http.request.address"; 
public static final String REQUEST_PORT = "http.request.port"; 

public static final String get(String property) { 
    return System.getProperty(property); 
} 

И я могу получить эти значения следующим образом:

String port = SystemPropertyHelper.get(SystemPropertyHelper.REQUEST_PORT); 

Можно ли, в Java, чтобы получить их, как перечисление?

REQUEST_PORT { 
    return System.getProperty("http.request.port"); 
} 

String port = SystemPropertyHelper.REQUEST_PORT; 
+0

Что с строковых констант? –

+0

Разве это не помешало бы поднять это значение? (Даже если изменение таких значений является анти-шаблоном) –

+0

Мне нравится использовать интерфейсы для констант, потому что вам не нужно вводить модификаторы 'public static final'. Просто подумай об этом. Сохранение как 2 секунды на постоянной! – null

ответ

3

Я бы разрешил его таким образом.

public static final String REQUEST_PORT = System.getProperty("http.request.port"); 
2
 enum SystemPropertyHelper { 
      REQUEST_PORT("http.request.port"), ...; 

      private String key; 

      Config(String key) { 
       this.key = key; 
      } 

      public String get() { 
      return System.getProperty(key); 
      } 
     } 

и использовать его как SystemPropertyHelper.REQUEST_PORT.get();

2

Конечно, вы можете создать enum, как это, который даст вам доступ к имени свойства, а значение:

public enum SystemPropertyEnum { 
    REQUEST_PORT("http.request.port"), 
    REQUEST_ADDRESS("http.request.address"); 

    private String propertyName; 
    private String value; 

    SystemPropertyEnum(final String propertyName) { 
     this.propertyName = propertyName; 
     this.value = System.getProperty(propertyName); 
    } 

    public String getPropertyName() { 
     return propertyName; 
    } 

    public String getValue() { 
     return value; 
    } 
} 

Тем не менее, вы могли бы избежать необходимости звонить получателю, просто используя переменные public static final String для ваших свойств, как предлагает @halloei.

1

Кроме того, вы можете сделать что-то вроде этого:

public enum Properties { 
    REQUEST_PORT("http.request.port"), 
    REQUEST_USE_SSL("http.request.ssl"); 
    // Add others... 

    private final String value; 

    Properties(String value) { 
     this.value = System.getProperty(value); 
    } 

    public String getValue() { 
     return this.value; 
    } 
} 

Это можно использовать как:

String port = Properties.REQUEST_PORT.getValue();