2012-04-18 82 views
3

こんにちは、私は長さ10,100,1000,10000の4列の配列を初期化しようとしていますし、これらの配列は静的イニシャライザのコードがjavaの65535バイトの制限値を超えていますか?

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

のようなものです。しかし、私は、静的初期化子のためコードの誤りが65535バイトの制限を超えて取得しています

どのように配列を初期化できますか?

はまた、ファイルからロードすることは私のためのオプションではありませんのでご注意:(

+4

世界の深いところには、Orcsよりも古くて汚いものがあります。 – mcfinnigan

+0

解決しようとしている問題を投稿する必要があるかもしれません。より良い方法があります。 – krock

+0

@krock私は配列をハードコードで初期化する必要があるteradata java udfsでいくつかのマッピングを行いたい – waqas

答えて

7

から各値をロードすることによって、Javaバイトコードで初期化されているで定数配列jvmメソッドのサイズは、その長さが16ビット数を使用してクラスファイルに格納されるため、65535バイトに制限されます。

jvmメソッドのサイズは、配列要素ごとに数バイトのコードが必要です。

値は簡単にループで計算することができない場合は、あなたが別の静的関数に初期化を破ることができます:初期化にパターン値を計算するために、そのもちろん、より良い値がある場合は

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

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

急いで。

+1

thanks Jörnあなたの助けを。私の問題のための解決策であるようです – waqas

7

使用forループたとえば:。

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

int引数をとり、その配列インデックスにあったはずの文字列値を返すメソッドを書くと、よりうまく解決できる可能性があります。ここではString.formatを使用しており、左パディング長を指定しています。

private static String getValue(int index, int stringLength) { 
    return String.format("%0" + stringLength + "d", index); 
} 
関連する問題