我有一个构造函数(用于自动生成的类),它有255个参数。在linux上使用ant和javac 1.6.0_02。该课程编写得很好,一切都很好。
然而,当我尝试使用jdk 1.6在windows xp上的eclipse中编译同一个类时,我收到以下错误
Too many parameters, parameter BLAH is exceeding the limit of 255 words eligible for method parameters
BLAH
是第256个参数。
有没有办法克服这个问题?更改自动生成的类不是一个选项,因为我需要在每次编译时更改它或更改生成器。这两个选项都是不可接受的,因为我们已经可以在linux上获得这个类。
PS:对于那些感兴趣的人,java类是使用JacORB从IDL文件生成的。不幸的是,由于它定义了我们软件和其他系统之间的接口,因此无法减少类中的参数数量。
答案 0 :(得分:15)
嗯,你打破了VM specification, section 4.10:
方法参数的数量是 a的定义限制为255 方法描述符(§4.3.3),其中 限制包括一个单位 实例或接口的情况 方法调用。注意一个方法 描述符是根据a定义的 方法参数长度的概念 哪个参数类型为long或 双重贡献两个单位 长度,所以这些类型的参数 进一步减少限制。
我建议你克服改变生成代码的障碍......说实话,我很惊讶它适用于Linux。如果它生成的字节码严格无效,我就不会完全感到惊讶,而且恰好它恰好适合你。
虽然总是试图找到与现有代码保持一致并忽略限制的方法,但我想在这种情况下你应该把注意力转向立即减少参数数量。
答案 1 :(得分:2)
有两个选项可以解决此问题:
答案 2 :(得分:1)
嗯,class file spec.说:
方法描述符仅在表示方法参数时才有效 总长度为255或更少,其中长度包括 在实例或接口方法的情况下对此的贡献 调用。总长度通过求和来计算 各个参数的贡献,其中类型的参数 long或double对长度和参数的贡献为两个单位 任何其他类型贡献一个单位。