“Кодируйте слишком большую” ошибку компиляции в Java

Есть ли какой-либо максимальный размер для кода в Java? Я записал функцию больше чем с 10 000 строк. На самом деле каждая строка присваивает значение переменной типа массив.

arts_bag[10792]="newyorkartworld";
arts_bag[10793]="leningradschool";
arts_bag[10794]="mailart";
arts_bag[10795]="artspan";
arts_bag[10796]="watercolor";
arts_bag[10797]="sculptures";
arts_bag[10798]="stonesculpture"; 

И при компиляции, я получаю эту ошибку: слишком большой код

Как я преодолеваю это?

85
задан Naman 8 May 2019 в 11:41
поделиться

6 ответов

Один метод в классе Java может быть не более 64 КБ байт-кода.

Но вы должны убрать это!

Используйте файл .properties для хранения этих данных и загрузите его через java.util.Properties

. Вы можете сделать это, поместив файл .properties в ваш путь к классам и используйте:

Properties properties = new Properties();
InputStream inputStream = getClass().getResourceAsStream("yourfile.properties");
properties.load(inputStream);
86
ответ дан 24 November 2019 в 08:22
поделиться

Это немного похоже на безумие. Разве вы не можете инициализировать массив, считывая значения из текстового файла или другого источника данных?

9
ответ дан 24 November 2019 в 08:22
поделиться

Как упоминалось в других ответах, для метода существует ограничение байт-кода в 64 КБ (по крайней мере, в java-компиляторе Sun)

Слишком мне было бы более разумно разбить этот метод на большее количество методов - каждый из которых назначает массиву определенные связанные вещи (возможно, имеет смысл использовать ArrayList для этого)

например. :

public void addArrayItems()
{
  addSculptureItems(list);
  ...
}

public void addSculptureItems(ArrayList list)
{
  list.add("sculptures");
  list.add("stonesculpture");
}

В качестве альтернативы можно загрузить элементы из статического ресурса, если они исправлены, как в файле свойств

2
ответ дан 24 November 2019 в 08:22
поделиться

Согласно спецификации виртуальной машины Java , код метода не должен быть больше 65536 байт :

Значение элемента code_length должно быть меньше 65536.

Где ] code_length определена в §4.7.3 Атрибут Code :

code_length : значение элемента code_length дает количество байтов в массиве кода для этого метода. Значение code_length должно быть больше нуля; массив кода не должен быть пустым.

code [] : массив кода дает фактические байты кода виртуальной машины Java, реализующего метод.

13
ответ дан 24 November 2019 в 08:22
поделиться

Существует ограничение на размер кода в 64К байт для метода

Сказав это, я должен согласиться с Ричардом; зачем вам нужен такой большой метод? Учитывая пример в ОП, достаточно файла свойств... или даже базы данных, если потребуется.

13
ответ дан 24 November 2019 в 08:22
поделиться

Попробуйте провести рефакторинг вашего кода. В Java есть ограничение на размер метода.

3
ответ дан 24 November 2019 в 08:22
поделиться
Другие вопросы по тегам:

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