Обработчик исключений для getenv()

Как я могу справиться NullPointerException а также SecurityException для такого вида кода строки:

public final static String PROJECT_DIR = System.getenv().get("HOME") + "/Projects/MyTestProject";

Достаточно будет просто обернуть его try/catch? Если так, как я могу отличаться, это будет NullPointerException или же SecurityException?

Также есть ли лучшие практики, чтобы сохранить его в свойствах, если getenv() недоступен или что-то еще?

2 ответа

Решение

Инициализировать final static String в инициализаторе класса. Создайте новое исключение, описывающее проблему (не установлено, не разрешено). Например:

public final static String PROJECT_DIR;

static {
     try {
       Map<String, String> env = System.getenv();

       if (!env.contains("HOME")) {
           throw new AssertionError("HOME not set as environment variable");
       }

       PROJECT_DIR = env.get("HOME") + "/Projects/MyTestProject";
     } catch (SecurityException e) {
       throw new AssertionError("Security policy doesn't allow access to system environment", e);
     }
 }

Это вызовет как NullPointerExceptions, так и SecurityExceptions:

public static void main(String[] args) throws Exception {


      System.out.println("System.getenv("HOME") = ");
      System.out.println(System.getenv("HOME"));
Другие вопросы по тегам