Как обойти ограничение размера статических инициализаторов в Java при инициализации большого количества константJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как обойти ограничение размера статических инициализаторов в Java при инициализации большого количества констант

Сообщение Anonymous »

У меня есть класс, содержащий большое количество сгенерированных констант:

Код: Выделить всё

public class Constants extends SomeBaseClass {

// init() is defined in some base class...
public static final XXX KEY1 = init(...);
public static final XXX KEY2 = init(...);
public static final XXX KEY3 = init(...);

// ...
public static final XXX KEY2000 = init(...);
}
Когда количество сгенерированных констант очень велико, это приводит к тому, что статический инициализатор превышает верхний предел размеров метода Java (т. е. > 64 КБ), что приводит к ошибка компилятора. Одним из решений является создание нескольких «методов инициализации блоков» для блоков, которые могут гарантированно создавать менее 64 КБ байт-кода, чтобы они вписывались в метод:

Код: Выделить всё

public class Constants extends SomeBaseClass {

public static XXX KEY1;
public static XXX KEY2;
public static XXX KEY3;

// ...
public static XXX KEY2000;

static {
initialise0001To1000();
initialise1001To2000();
}

private static void initialise0001To1000() {
KEY1 = init(...);
KEY2 = init(...);
KEY3 = init(...);
// ...
}

private static void initialise1001To2000() {
// ...
KEY2000 = init(...);
}
}
Недостаток этого подхода в том, что я больше не могу объявлять константы как окончательные, поскольку они теперь больше не инициализируются непосредственно в статическом инициализаторе.

Недостаток этого решения заключается в том, что я больше не могу объявлять константы как окончательные, поскольку они больше не инициализируются непосредственно в статическом инициализаторе.

Недостаток этого подхода в том, что я больше не могу объявлять константы как окончательные, поскольку они больше не инициализируются непосредственно в статическом инициализаторе.

Недостаток этого решения заключается в том, что я больше не могу объявлять константы как окончательные, поскольку они больше не инициализируются непосредственно в статическом инициализаторе.

Недостаток этого решения заключается в том, что я больше не могу объявлять константы как окончательные, поскольку они больше не инициализируются непосредственно в статическом инициализаторе.

p>

Мой вопрос: как я могу обойти это ограничение компилятора/JVM, чтобы по-прежнему генерировать статические конечные константы?

Подробнее здесь: https://stackoverflow.com/questions/108 ... initialisi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»