Erro de compilation de Java: o parâmetro x está excedendo o limite de 255 palavras

Eu tenho um construtor (para uma class gerada automaticamente) que possui 255 paremeters. Usando ant no linux com javac 1.6.0_02. A class compila bem e tudo é bom.

No entanto, quando eu tento compilar a mesma class de dentro do eclipse no windows xp com jdk 1.6, recebo o seguinte erro

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

BLAH é o 256º parâmetro.

Existe uma maneira de superar esse problema? Alterar a class gerada automaticamente não é uma opção, pois eu precisaria alterá-la a cada compilation ou alterar o gerador. Ambas as opções não são aceitáveis ​​porque já podemos obter essa class no linux.

PS: Para aqueles que estão interessados, a class java é gerada a partir de um arquivo IDL usando JacORB. Infelizmente, o número de parâmetros na class não pode ser reduzido, pois define uma interface entre o nosso software e outros sistemas.

Bem, você está quebrando a especificação da VM, seção 4.10 :

O número de parâmetros do método é limitado a 255 pela definição de um descritor de método (§4.3.3), onde o limite inclui uma unidade para isso no caso de invocações de método de instância ou interface. Observe que um descritor de método é definido em termos de uma noção de comprimento do parâmetro do método na qual um parâmetro do tipo longo ou duplo contribui com duas unidades para o comprimento, portanto, os parâmetros desses tipos reduzem ainda mais o limite.

Eu sugiro que você supere os obstáculos em mudar o código gerado … Estou muito surpreso que funciona no Linux, para ser honesto. Eu não ficaria totalmente surpreso se o bytecode gerado fosse estritamente inválido e, por acaso, esteja funcionando para você no momento.

Embora seja sempre tentador tentar encontrar maneiras de manter o código existente e ignorar os limites, acho que, nesse caso, você deve voltar sua atenção para a redução do número de parâmetros imediatamente.

Existem 2 opções para resolver este problema:

  1. Gere sua class com nenhum ou alguns argumentos de construtor e, em seguida, defina os parâmetros de descanso por meio de setters. Como usar o padrão de construtor.
  2. Faça classs mais simples, cada uma contendo 3 ou 4 variables ​​e defina esses objects mais simples em 1 master class.

Bem, a especificação do arquivo de class. diz:

Um descritor de método é válido apenas se ele representar parâmetros de método com um comprimento total de 255 ou menos, em que esse comprimento inclui a contribuição para isso no caso de invocações de método de instância ou de interface. O comprimento total é calculado sumndo as contribuições dos parâmetros individuais, onde um parâmetro do tipo longo ou duplo contribui com duas unidades para o comprimento e um parâmetro de qualquer outro tipo contribui com uma unidade.