Цитата:
Сообщение от ASevenfold
Она не статична, не пойдет.
|
Для тех, кто в танке:
Даже статичная переменная может вызвать исключения пакета java.lang даже при обычном одноподтечном программировании. Например,
NullPointerException,
UnsupportedOperationException или какой-нить еще.
Код:
class HlorkaGood {
public static Object HLORA_IS_MY_FRIEND;
...
}
// Обращаемся к переменной
...
Object test = HlorkaGood.HLORA_IS_MY_FRIEND;
...
// Будет исключение NullPointerException
Поэтому что не инициализировали. Если переменная не константа, то должна иметь дефолтовое значени или полуконстанта (файл конфигурации), то используйте блоки static - это как аналог директивам Си.
Код:
class HlorkaTheBest{
public static Object HLORA_IS_MY_FRIEND;
...
static {
HLORA_IS_MY_FRIEND = new String();
}
}
Для полуконстант, рекомендуется в блоке статик выполнять загрузку файла конфигурации. Если файл конфигурации имеет опии разработчика, то его как правила пихают в JAR-библиотеку, в последнем случае используют доступ к ресурсу по URL через статичный метод ClassLoader'а:
Код:
InputStream s = ClassLoader.getResourceAsStream("org/mylib/test/hlorka.properties");
Тут есть 1 косяк, многие использую одноименный метод из собственного класса, т.е.
HlorkaTheBest.getResourceAsStream(?), но в этом случае надо будет ставить еще 1 слеш в самом начале, иначе будет ругаться. что ресурс ненайден.
Также есть 1 удобный способ программирования, когда у вас конфиги имеют 1 тип данных, ну например все экземпляры типа String или int, то удобно запонять их из файла конфигураций через пакет Reflect, но эт уже совсем проффессионалы так делают. Это имеет смысл для каких-то текстовых сообщейни. А вообще не забывайте что в яве реализована возможность интернационализации через java.util.MessageBuilder, весьма удобно при написании мультиязычного приложения. Хотя это скорее локализация, чем интернационализация, т.к. последняя подразумевает не только смену языка.