静态初始值设定项的代码超出了java中的65535字节限制错误?

静态初始值设定项的代码超出了java中的65535字节限制错误?,java,static,initialization,Java,Static,Initialization,嗨,我正在尝试初始化4个长度为10100100010000的字符串数组,这些数组如下 array1={"0","1",..."9"} array2={"00","01",..."99"} array3={"000","001",..."999"} array4={"0000","0001",..."9999"} 但是我得到的错误是:静态初始值设定项的代码超过了65535字节的限制 如何初始化阵列 还请注意,从文件加载它不是我的选项:(使用进行循环。例如: for (int i = 0;

嗨,我正在尝试初始化4个长度为10100100010000的字符串数组,这些数组如下

array1={"0","1",..."9"} 
array2={"00","01",..."99"} 
array3={"000","001",..."999"} 
array4={"0000","0001",..."9999"} 
但是我得到的错误是:静态初始值设定项的代码超过了65535字节的限制

如何初始化阵列


还请注意,从文件加载它不是我的选项:(

使用
进行
循环。例如:

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

for(int i=0;i中的常量数组通过从常量池加载每个值并将其分配给相应的数组索引,以java字节码初始化。这需要每个数组元素几个字节的代码。jvm方法的大小限制为65535字节,因为它的长度使用16位数字存储在类文件中

在循环中无法轻松计算值的情况下,可以将初始化分解为单独的静态函数:

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

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

如果初始化值有一个模式,当然最好是动态计算值。

最好通过编写一个方法来解决这个问题,该方法采用int参数并返回该数组索引处的字符串值。这里使用string.format并指定左填充长度:

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

在世界的深处,有比兽人更古老、更肮脏的东西。也许你应该发布你试图解决的问题。会有更好的方法。@krock我想在teradata java UDF中做一些映射,我需要初始化我的数组HardcodeIdley它可能更好地通过编写一个包含int参数和retu的方法来解决rns是数组索引中的字符串值。我可以看到Java的一个家伙在说:“65KB对任何人来说都应该足够了”…人们会认为人们从过去的错误中吸取了教训…很好的解决方法…太差劲了…感谢Jörn的帮助…这似乎是解决我问题的方法