Pregunta sobre java, initialization, static – ¿El código para el inicializador estático está excediendo el error de límite de 65535 bytes en java?

4

Hola, estoy intentando inicializar 4 matrices de cadenas de longitud 10,100,1000,10000 y estas matrices son como

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

Pero estoy recibiendo el error deEl código para el inicializador estático está excediendo el límite de 65535 bytes

¿Cómo puedo inicializar mis matrices?

También tenga en cuenta que cargarlo desde un archivo no es una opción para mí :(

Tal vez debería publicar el problema que está tratando de resolver. Habrá una mejor manera. krock
Hay cosas más viejas y más desagradables que los orcos en los lugares más profundos del mundo. mcfinnigan
Quizás se resuelva mejor escribiendo un método que tome un argumento int y devuelva el valor de cadena que habría estado en ese índice de matriz. krock
@krock quiero hacer un mapeo en teradata java udfs para lo cual necesito inicializar mis matrices hardcodeidly waqas
Simplemente puedo ver a uno de los muchachos de Java: "65KB debería ser suficiente para cualquiera" ... uno podría pensar que la gente aprende de errores pasados ​​... Yay para solucionar los problemas ... Qué mal ... Markus A.

Tu respuesta

3   la respuesta
2

Quizás se resuelva mejor escribiendo un método que tome un argumento int y devuelva el valor de cadena que habría estado en ese índice de matriz. Aquí está utilizando String.format y especificando la longitud del relleno izquierdo:

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

Utilizarfor bucles Por ejemplo:

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

La matriz constante en se inicializa en el código de bytes java cargando cada valor de la agrupación constante y asignándolo al índice de matriz correspondiente. Esto toma varios bytes de código por elemento de matriz. El tamaño de un método jvm está limitado a 65535 bytes ya que su longitud se almacena en el archivo de clase utilizando un número de 16 bits.

En el caso de que los valores no puedan calcularse fácilmente en un bucle, podría dividir la inicialización en funciones estáticas separadas:

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

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

Por supuesto, si hay un patrón en los valores de inicialización, es mejor calcular los valores sobre la marcha.

gracias Jörn por tu ayuda ... parece ser la solución para mi problema waqas

Preguntas relacionadas