Pytanie w sprawie java, static, initialization – Kod statycznego inicjatora jest większy niż błąd błędu 65535 bajtów w Javie?

4

Hi Próbuję zainicjować 4 tablice ciągów o długości 10,100,1000,10000 i te tablice są podobne

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

Ale mam błądKod statycznego inicjatora przekracza limit 65535 bajtów

jak mogę zainicjować moje tablice?

Zauważ też, że ładowanie go z pliku nie jest dla mnie opcją :(

@krock chcę zrobić mapowanie w teradata java udfs, dla którego muszę zainicjować moje tablice na sztywno waqas
Widzę, że jeden z chłopaków z Javy: „65KB powinno wystarczyć każdemu” ... można by pomyśleć, że ludzie uczą się na błędach z przeszłości ... Tak, dla obejść ... Jak kiepski ... Markus A.
W głębokich miejscach świata są starsze i bardziej obrzydliwe rzeczy niż orkowie. mcfinnigan
Może powinieneś opublikować problem, który próbujesz rozwiązać. Będzie lepszy sposób. krock
Może lepiej rozwiązać ten problem, pisząc metodę, która pobiera argument int i zwraca wartość ciągu, która byłaby w tym indeksie tablicy. krock

Twoja odpowiedź

3   odpowiedź
2

pisząc metodę, która pobiera argument int i zwraca wartość ciągu, która byłaby w tym indeksie tablicy. Tutaj używa String.format i określa lewą długość dopełnienia:

<code>private static String getValue(int index, int stringLength) {
    return String.format("%0" + stringLength + "d", index);
}
</code>
7

Posługiwać sięfor pętle. Na przykład:

<code>for (int i = 0; i <= 9; i++)
    array1[i] = String.valueOf(i);
</code>
7

ładując każdą wartość z puli stałej i przypisując ją do odpowiedniego indeksu tablicy. To wymaga kilku bajtów kodu na element tablicy. Rozmiar metody jvm jest ograniczony do 65535 bajtów, ponieważ jej długość jest przechowywana w pliku klasy przy użyciu 16-bitowej liczby.

W przypadku, gdy wartości nie można łatwo obliczyć w pętli, można przerwać inicjalizację na oddzielne funkcje statyczne:

<code>static {
    array1 = getValuesForArray1();
    ...
}

private static String[] getValuesForArray1() {
    ...
}
</code>

Jeśli istnieje wzorzec wartości inicjalizacji, oczywiście lepiej obliczyć wartości w locie.

dzięki Jörn za twoją pomoc .. wydaje się, że jest to rozwiązanie mojego problemu waqas

Powiązane pytania