Вопрос по java – Код для статического инициализатора превышает ошибку лимита 65535 байт в Java?

4

Привет, я пытаюсь инициализировать 4 строковых массивов длиной 10 100 000 000 10000, и эти массивы похожи

<code>array1={"0","1",..."9"} 
array2={"00","01",..."99"} 
array3={"000","001",..."999"} 
array4={"0000","0001",..."9999"} 
</code>

Но я получаю ошибкуThe code for the static initializer is exceeding the 65535 bytes limit

как я могу инициализировать свои массивы?

Также обратите внимание, что загрузка из файла не вариант для меня :(

Возможно, вам следует опубликовать проблему, которую вы пытаетесь решить. Там будет лучший способ. krock
Я вижу только одного из парней из Java: «65 КБ должно хватить на всех»… можно подумать, что люди учатся на ошибках прошлого… ура для обходных путей… Как глупо… Markus A.
В более глубоких уголках мира есть вещи более старые и грязные, чем орки. mcfinnigan
Возможно, лучше решить эту проблему, написав метод, который принимает аргумент int и возвращает строковое значение, которое было бы в этом индексе массива. krock
@krock Я хочу сделать некоторые отображения в Java-файлах Teradata Java, для которых мне нужно инициализировать свои массивы hardcodeidly waqas

Ваш Ответ

3   ответа
2

лучше решить эту проблему, написав метод, который принимает аргумент int и возвращает строковое значение, которое было бы в этом индексе массива. Здесь он использует String.format и указывает длину левого отступа:

private static String getValue(int index, int stringLength) {
    return String.format("%0" + stringLength + "d", index);
}
7

for петли. Например:

for (int i = 0; i <= 9; i++)
    array1[i] = String.valueOf(i);
7

загружая каждое значение из пула констант и присваивая его соответствующему индексу массива. Это занимает несколько байтов кода на элемент массива. Размер метода jvm ограничен 65535 байтами, поскольку его длина хранится в файле класса с использованием 16-битного числа.

В случае, когда значения не могут быть легко вычислены в цикле, вы можете разбить инициализацию на отдельные статические функции:

static {
    array1 = getValuesForArray1();
    ...
}

private static String[] getValuesForArray1() {
    ...
}

Если есть шаблон для значений инициализации, то, конечно, лучше рассчитать значения на лету.

спасибо J & # xF6; rn за вашу помощь .. похоже, это решение моей проблемы waqas

Похожие вопросы