Pergunta sobre java, static, initialization – O código para o inicializador estático está excedendo o erro de limite de 65535 bytes em java?

4

Oi eu estou tentando inicializar matrizes de 4 string de comprimento 10,100,1000,10000 e essas matrizes são como

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

Mas estou recebendo o erro deO código para o inicializador estático está excedendo o limite de 65535 bytes

Como posso inicializar meus arrays?

Observe também que carregá-lo do arquivo não é uma opção para mim :(

@krock eu quero fazer algum mapeamento em teradata java udfs para o qual eu preciso para inicializar meus arrays hardcodeidly waqas
Eu posso ver apenas um dos caras de Java dizendo: "65KB deveria ser o suficiente para qualquer um" ... alguém poderia pensar que as pessoas aprendem com os erros do passado ... Porra, porra ... Markus A.
Talvez seja melhor resolvê-lo escrevendo um método que use um argumento int e retorne o valor da string que estaria nesse índice de array. krock
Há coisas mais antigas e mais desagradáveis ​​do que orcs nos lugares mais profundos do mundo. mcfinnigan
Talvez você devesse postar o problema que está tentando resolver. Haverá um caminho melhor. krock

Sua resposta

3   a resposta
2

o int e retorne o valor da string que estaria nesse índice de array. Aqui está usando String.format e especificando o comprimento de preenchimento à esquerda:

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

Usarfor rotações. Por exemplo:

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

carregando cada valor do conjunto constante e atribuindo-o ao índice de matriz correspondente. Isso leva vários bytes de código por elemento de matriz. O tamanho de um método jvm é limitado a 65535 bytes, pois seu tamanho é armazenado no arquivo de classe usando um número de 16 bits.

No caso em que os valores não podem ser facilmente calculados em um loop, você pode dividir a inicialização em funções estáticas separadas:

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

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

Se houver um padrão nos valores de inicialização, é claro que é melhor calcular os valores na hora.

obrigado Jörn pela sua ajuda ... parece ser a solução para o meu problema waqas

Perguntas relacionadas