web-dev-qa-db-ja.com

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"; 

コンパイル中にこのエラーが発生します:コードが大きすぎます

どうすればこれを克服できますか?

83
trinity

Javaクラスの単一メソッドは、最大64KBのバイトコードです。

ただし、これをクリーンアップする必要があります!

つかいます .propertiesファイルを使用してこのデータを保存し、 Java.util.Properties

これを行うには、.propertiesファイルをクラスパスに置き、次を使用します。

Properties properties = new Properties();
InputStream inputStream = getClass().getResourceAsStream("yourfile.properties");
properties.load(inputStream);
83
Bozho

Java Virtual Machine仕様 によると、 メソッドのコードは65536バイトを超えてはなりません

code_lengthアイテムの値は65536未満でなければなりません。

code_length§4.7.3Code属性 で定義されています:

code_lengthcode_lengthアイテムの値は、このメソッドのコード配列のバイト数を示します。 code_lengthの値はゼロより大きくなければなりません。コード配列は空であってはなりません。

code[]:コード配列は、メソッドを実装する仮想マシンコードJava)の実際のバイトを提供します。

12
Joachim Sauer

method には64Kバイトコードのサイズ制限があります

そうは言っても、リチャードに同意しなければなりません。なぜそんなに大きなメソッドが必要なのですか? OPの例を考えると、プロパティファイルで十分です。または、必要に応じてデータベースでさえ十分です。

12
Everyone

これは少し狂気のようです。テキストファイルまたはその他のデータソースから値を読み取って配列を初期化できませんか?

9
RichardOD

コードをリファクタリングしてみてください。 Javaのメソッドのサイズには制限があります。

3
Padmarag

他の回答で述べたように、メソッドには64KBのバイトコード制限があります(少なくともSunのJavaコンパイラ)

私も、そのメソッドをより多くのメソッドに分割する方が理にかなっています-それぞれが特定の関連するものを配列に割り当てます(これを行うためにArrayListを使用する方が理にかなっているかもしれません)

例えば:

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

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

または、プロパティファイルなどのように固定されている場合は、静的リソースからアイテムをロードできます。

2
saret

別のメソッドを追加して、追加のデータスペース用にコード用のスペースを作成できます。大量のデータスペースを使用するメソッドがある場合があります。私は同じ問題を抱えていたのでメソッドを分割してみて、私のJava Android code、The issueそれをやった後.

1
FermDroi

私は自分でこの問題に遭遇しました。私のために働いた解決策は、メソッドをリファクタリングし、より管理しやすい部分に縮小することでした。あなたのように、私はほぼ10Kの回線方式を扱っています。ただし、静的変数と小さなモジュラー関数を使用することで、問題は解決しました。

より良い回避策があるようですが、Java 8を使用すると、何もありません...

1
Azadi B.

このエラーは、単一の関数のコードが大きすぎるために発生することがあります...そのエラーを解決するには、その関数を複数の関数に分割します。

//Too large code function
private void mySingleFunction(){
.
.
2000 lines of code
}
//To solve the problem
private void mySingleFunction_1(){
.
.
500 lines of code
}
private void mySingleFunction_2(){
.
.
500 lines of code
}
private void mySingleFunction_3(){
.
.
500 lines of code
}
private void mySingleFunction_4(){
.
.
500 lines of code
}
private void MySingleFunction(){
mySingleFunction_1();
mySingleFunction_2();
mySingleFunction_3();
mySingleFunction_4();
}
0