Има ли ограничение колко голям може да бъде java файл?

Разработвам проект, в който се изисква да генерирам Java код. Правех някои тестове, когато се натъкнах на проблем с ограничение от 65535 байта на основния метод. Моят генериран файл изглеждаше нещо подобно:

public class foo{
    public static void main(String[] args){
        //
        //7000 lines later
        //
    }
}

Помислих си, че съм умен, като генерирам файла по този начин:

public class foo{
    public static void bar(){
        //
        //7000 lines later
        //
    }
    public static void main(String[] args){
        bar();
    }
}

Но разбрах, че ограничението от 65535 байта се прилага за всеки метод.

Искам да знам дали „буферирането“ на инструкции в множество методи ще реши проблема ми. Има ли някакво ограничение колко голям може да бъде java файлът?


person user1581900    schedule 05.10.2012    source източник
comment
Има ли някаква конкретна причина за писане на такъв голям основен метод?   -  person Yogendra Singh    schedule 05.10.2012
comment
Ако пишете целия код в основния метод, вие го правите погрешно.   -  person nhahtdh    schedule 05.10.2012
comment
Да имаш метод, който има 7000+ реда, би било кошмар за поддръжка. Това също така показва, че вашият код не е модулен по природа. Трябва да опитате да разделите кода си на малки, четливи и логични методи.   -  person Sujay    schedule 05.10.2012
comment
Разгледайте тази връзка weblogs.java.net/blog/editor/archive/2010/01/19/   -  person RNJ    schedule 05.10.2012
comment
Има ли някаква конкретна причина за писане на такъв голям mainmethod? Според концепциите на OOAD (обектно ориентиран анализ и дизайн) трябва да пишете модулно. Един метод не трябва да съдържа повече от няколко (10s) реда. 7000 в един метод не звучи правилно.   -  person Yogendra Singh    schedule 05.10.2012
comment
Има причина за толкова голям файл. Изработваме екселски файлове. Наистина големи. С Apache POI. След като java файлът се компилира и стартира, той се изтрива, за да не се използва отново, така че никой наистина няма да поддържа методите.   -  person user1581900    schedule 05.10.2012


Отговори (4)


Файлът може да бъде с всякакъв размер, но методът не може да се компилира до повече от 65535 байта.

Единственият начин да решите това е да

  • използвайте по-малки методи, такъв голям метод е нечетлив.
  • ако генерира код, създайте множество методи.
  • екстернализиране на информацията като файл с данни или база данни.
person Peter Lawrey    schedule 05.10.2012

person Rytek    schedule 05.10.2012

Това е известна заявка за грешка/функция (официален инструмент за проследяване на грешки в Java).

Въпреки това трябва да го разделите на различни методи.

person juanignaciosl    schedule 05.10.2012

Предполагам, че това ограничение съществува и вие сте го достигнали - както е посочено тук .

Освен това разгледайте тази дискусия.

person linski    schedule 05.10.2012