Общепрограммные параметры в Java - PullRequest
1 голос
/ 01 августа 2010

Я начал работать над переводом Java-программы, которая имеет дело с десятками диалоговых классов.Интересно, как можно создать параметр, который понятен во всех этих классах, без необходимости объявлять его в каждом из них.

На самом деле это два параметра.Пробовал что-то вроде:

public Locale currentLocale = new Locale("en");
public ResourceBundle text = ResourceBundle.getBundle("MessagesBundle", currentLocale);

в классе запуска программы, но не повезло.

Любой совет?

Ответы [ 2 ]

1 голос
/ 01 августа 2010

без необходимости объявлять его в каждом.

Существует два основных подхода:

  1. Синглтон-паттерн .
  2. Сохраните ссылку в ветке, используя ThreadLocal.

В любом случае вам необходимо принять во внимание множество предостережений.Singletons не работает хорошо в средах с несколькими загрузчиками классов / JVM и ThreadLocals не работает хорошо, когда вы сами создаете несколько потоков для обработки бизнес-задачи.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Т т. Е. Тогда, когда во время запуска приложения в каком-либо классе фронт-контроллера создается безопасный объект, передается в качестве аргумента в качестве аргумента для бизнеса/ моделировать объекты, когда это необходимо.

0 голосов
/ 01 августа 2010

Установка родительского ResourceBundle

Используйте метод ResourceBundle.setParent(). Если конкретный ключ не может быть найден в текущем ResourceBundle, он будет искать родительский ResourceBundle.

getBundle будет автоматически искать родителей

Как утверждает JavaDoc для ResourceBundle.getBundle(String, Locale, ClassLoader), это автоматически происходит, когда вы загружаете пакет ресурсов для определенного Locale и пакет с тем же базовым именем можно найти без суффикса языкового стандарта. 1016 *

В вашем примере ResourceBundle будет загружен из файла (расширение .properties необязательно) с именем:

MessagesBundle_en.properties

Но он также будет искать общий

MessagesBundle.properties

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...