Java的编译错误:参数X超过255个字的限制(Java Compile error: Parame

2019-07-02 16:57发布

我有一个具有255个paremeters一个构造函数(用于自动生成的类)。 在Linux上使用蚂蚁用javac 1.6.0_02。 类编译罚款,一切都很好。

然而,当我尝试从Eclipse中编译同一类在Windows XP上使用JDK 1.6,我得到以下错误

Too many parameters, parameter BLAH is exceeding the limit of 255 words eligible for method parameters

BLAH是第256个参数。

有没有办法解决这个问题? 更改自动生成的类是不是我需要改变它每编译或改变发电机的选项。 这两个选项是不能接受的,因为我们已经可以得到在Linux上这个课。

PS:对于那些有兴趣谁,是从IDL文件中使用JacORB生成的Java类。 不幸的是,因为它定义了我们的软件和其他系统之间的接口不能减少在类参数的数量。

Answer 1:

那么你打破了虚拟机规范,第4.10 :

的方法的参数的数量由一方法描述符(§4.3.3),其中该限制包括这一个单元实例或接口方法调用的情况下的定义限制为255。 注意,方法描述符在方法参数长度的概念来定义,其中长型或双有助于两个单元的长度,所以这些类型的参数进一步降低限制的参数。

我建议你克服在改变生成代码的障碍......我很惊讶它工作在Linux上,要诚实。 我不会完全感到惊讶,如果它产生的字节码是严格无效的,它只是发生在此刻为你工作。

虽然它总是诱惑,试图寻找与现有代码保持和无视限制的方式,我觉得在这种情况下,你应该把你的注意力立刻减少参数的数量。



Answer 2:

有2个选项来解决这个问题:

  1. 产生通过制定者没有或一些构造函数的参数,然后将其余的参数类。 像使用生成器模式。
  2. 使简单的类各保持3个或4个变量,并设置在1个主类那些简单的对象。


Answer 3:

那么, 类文件规范。 说:

一种方法,描述符是有效的,只有当它表示具有255或更低的总长度,其中该长度包括在实例或接口方法调用的情况下,这种情况的贡献方法参数。 的总长度是通过把各个参数,其中长型或双有助于两个单元的长度的参数以及任何其他类型的参数有助于一个单元的贡献来计算。



文章来源: Java Compile error: Parameter x is exceeding the limit of 255 words