Подтвердить что ты не робот

Объявление объекта ArrayList как final для использования в файле констант

Я создаю ArrayList объектов. Ниже приведен код

ArrayList someArrayList = new ArrayList();

Public ArrayList getLotOfData()
{
ArrayList someData = new ArrayList();
return someData; 
}


someArrayList = eDAO.getLotOfData();

Как только у меня есть этот объект ArrayList "someArrayList", я хотел бы объявить его общедоступным и окончательным и сохранить его в файле Constants, чтобы он мог получить доступ во всем мире. Есть ли способ, которым я могу это сделать? Если я объявлю объект Arraylist общедоступным и окончательным, то я не смог бы переназначить ему какие-либо ценности. Я попробовал следующее

public final ArrayList anotherArrayList = new ArrayList();

anotherArrayList.addAll(someArrayList);

Я надеялся сохранить этот "anotherArrayList" в качестве глобального объекта ArrayList и использовать его, но это возвращает исключение nullpointer. Я хочу использовать его точно так же, как константа String "ConstantsFile.anotherArrayList". Любые идеи???

4b9b3361

Ответ 1

Guava предоставляет ImmutableList для просто об этом причина. (Кроме того, у него нет лишних служебных данных, которые ArrayList выделяет, чтобы освободить место для будущих элементов, которые вы не будете добавлять для своего приложения.)

public static final ImmutableList<String> CONSTANTS = 
  ImmutableList.of("foo", "bar");

Ответ 2

Вы можете легко сделать это public static final, но это не остановит людей от изменения содержимого.

Лучший подход - безопасно публиковать "константу" по:

  • обертывание в немодифицируемый список
  • с использованием блока экземпляра для его заполнения

Результат в одном опрятном окончательном объявлении с инициализацией:

public static final List<String> list = Collections.unmodifiableList(
    new ArrayList<String>() {{
        add("foo");
        add("bar");
        // etc
    }});

или, аналогичный, но другой стиль для простых элементов (которые не нуждаются в коде)

public static final List<String> list = 
    Collections.unmodifiableList(Arrays.asList("foo", "bar"));

Ответ 3

Совместимость с Java 1.4:

public static final List STRINGS = Collections.unmodifiableList(
    Arrays.asList(new String[] {"foo", "bar"}));

Такой список немодифицируется, вызывающие методы, такие как add(), remove() или set(), вызовут UnsupportedOperationException.

Для менее древних версий Java:

public static final List<String> STRINGS = Collections.unmodifiableList(
    Arrays.asList("foo", "bar"));

И, наконец, Java 9 поставляется с:

public static final List<String> STRINGS = List.of("foo", "bar");