Le Code de “trop grand” erreur de compilation en Java
Est-il une taille maximale pour le code en Java? J'ai écrit une fonction avec plus de 10 000 lignes. En fait, chaque ligne assigne une valeur à une variable de tableau.
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";
Et lors de la compilation, j'obtiens cette erreur: code trop grand
Comment puis-je surmonter cela?
Je suis juste abasourdi... Il y a forcément une meilleure façon de le faire.
Vous avez vraiment besoin de regarder une base de données pour ce type de chose, à défaut d'un fichier de propriétés.
Pourquoi êtes-vous les gars crier à la pauvre mec pour une mauvaise conception? Peut-être OP obtenu que fou méthode par certains outil de génération de code.
Je suis abasourdi que ces courts commentaires critiques a beaucoup de upvotes!
Pourquoi avez votre démarrage de l'application, passer beaucoup de temps par l'analyse d'un fichier de texte quand vous pouvez avoir le compilateur pré-générer tout au moment de la compilation? C'est un mauvais design si vous souhaitez modifier les données sans avoir à recompiler, ou écrire la méthode manuelle, mais c'est pas mal le design à tous, si vous générez le code source. (Au moins, si vous le faites dans une manière qui permet au compilateur de pregenerate le tableau).
Vous avez vraiment besoin de regarder une base de données pour ce type de chose, à défaut d'un fichier de propriétés.
Pourquoi êtes-vous les gars crier à la pauvre mec pour une mauvaise conception? Peut-être OP obtenu que fou méthode par certains outil de génération de code.
Je suis abasourdi que ces courts commentaires critiques a beaucoup de upvotes!
Pourquoi avez votre démarrage de l'application, passer beaucoup de temps par l'analyse d'un fichier de texte quand vous pouvez avoir le compilateur pré-générer tout au moment de la compilation? C'est un mauvais design si vous souhaitez modifier les données sans avoir à recompiler, ou écrire la méthode manuelle, mais c'est pas mal le design à tous, si vous générez le code source. (Au moins, si vous le faites dans une manière qui permet au compilateur de pregenerate le tableau).
OriginalL'auteur trinity | 2010-03-09
Vous devez vous connecter pour publier un commentaire.
Mais vous devez nettoyer cette!
Utilisation
.properties
fichier pour stocker ces données, et de les charger viajava.util.Propriétés
Vous pouvez le faire en plaçant le
.properties
fichier sur votre chemin de classe et d'utilisation:Je ne savais pas c'est corrigé, merci pour la clarification.
où puis-je trouver les .fichier de propriétés
vous créez votre propre, puis le mettre dans le classpath
je n'ai pas d'utiliser votre suggestion , mais je suis impatient de l'essayer la prochaine fois.. ont utilisé une base de données pour stocker cette information , et 'ai modifié le reste du code en conséquence..
OriginalL'auteur Bozho
Il y a un 64K octets de code de limite de taille sur un méthode
Cela dit, je suis d'accord w/Richard, pourquoi avez-vous besoin d'une méthode que les grandes? Compte tenu de l'exemple dans l'OP, un fichier de propriétés devrait suffire ... ou même une base de données si nécessaire.
Jamais été confronté à ce problème avec enum moi-même. Il existe des messages par d'autres utilisateurs ici sur DONC sur le même sujet. Par exemple - stackoverflow.com/questions/2546470 Il peut être intéressant de regarder dans le générés .fichier de classe pour un
enum
à voirÉnumérer les instances (c'est à dire les objets qui représentent les constantes) sont créés dans la classe " initialiseur statique, qui est une méthode et ont la même limite.
J'ai connu le même problème avec cadre-code généré pour un vraiment complexe formulaire web. La solution a été de diviser la forme de composants, de sorte que le code généré pour chaque composant a été aussi divisé.
OriginalL'auteur Everyone
Selon la La Machine Virtuelle Java de spécification, un le code d'une méthode ne doit pas être plus grand que 65536 octets:
Où
code_length
est défini dans §4.7.3 LeCode
l'Attribut:OriginalL'auteur Joachim Sauer
Cela semble un peu comme de la folie. Pouvez-vous ne pas initialiser le tableau par la lecture des valeurs à partir d'un fichier texte, ou une autre source de données?
OriginalL'auteur RichardOD
Essayez de revoir votre code. Il n'y a de limite sur la taille de méthode en Java.
Il a dit que le reste de son code dépend de ce qui est un tableau. Donc, il pourrait refactoriser la méthode pour passer de la responsabilité de chargement de données à une autre méthode/de l'Usine à partir d'un fichier/base de données.
vous pouvez créer et d'initialiser les tableaux de grande taille sans avoir recours à ce genre de bêtises; voir @Kris réponse.
Refactoriser - "Processus d'évolution d'un programme d'ordinateur sans modifier le code source de son externe comportement fonctionnel afin d'améliorer certains des attributs non fonctionnel du logiciel." Comment sont les autres réponses différentes à partir de cela?
OriginalL'auteur Padmarag
Comme mentionné dans d'autres réponses, il est de 64 ko de bytecode à la limite pour une méthode (au moins dans le Soleil du compilateur java)
Trop moi, il serait plus logique de briser cette méthode en plus de méthodes de chaque affectation de certaines choses liées à la matrice (peut être plus judicieux d'utiliser une ArrayList pour ce faire)
par exemple:
Sinon, vous pouvez charger les éléments à partir d'une ressource statique si elles sont fixes comme à partir d'un fichier de propriétés
Eh bien, c'est clairement de données, et non du code. Votre commentaire est trompeur, parce que ce que vous ne devriez pas faire est de mixer, les données et le code, mais ici, ils ne sont pas mélangés.
Je pense que c'est un bon travail.Je viens de la croix avec ce problème avec environ 21k lignes de code avec plus de 7000 acheminer les messages.Je le fixer par la div ceux du routage des messages dans 7 de la fonction avec le nom xxx0 xxx1 xxx2.
OriginalL'auteur saret
J'ai ce problème moi-même. La solution qui a fonctionné pour moi a été de revoir et de réduire la méthode de pièces plus faciles à réaliser. Comme vous, je m'occupe de près de 10K méthode de la ligne. Cependant, avec l'utilisation de variables statiques ainsi que des petites fonctions modulaires, le problème a été résolu.
Semble qu'il serait une meilleure solution, mais à l'aide de Java 8, il n'y a aucun...
OriginalL'auteur Azadi B.
Vous pouvez ajouter une autre méthode pour créer de l'espace pour votre code pour plus d'espace de données, vous pourriez avoir une méthode qui est de prendre une grande quantité de données de l'espace. Essayez de diviser vos méthodes, car j'ai eu le même problème et et le fixer par la création d'une autre une méthode supplémentaire pour les mêmes données dans mon java Android code, Le problème a disparu après que j'ai fait.
OriginalL'auteur FermDroi
Cette erreur se produisent parfois en raison d'un trop grand code dans une seule fonction...
Pour résoudre cette erreur, split qui fonctionnent dans de multiples fonctions, comme
OriginalL'auteur Muhammad Umar Farooq