«Слишком много синтетических параметров ...» в Eclipse.Как мне обойти / решить? - PullRequest
0 голосов
/ 12 марта 2012

У меня очень редкий вопрос, и я не могу найти в интернете никакой информации по этому вопросу!

У меня есть кнопка в приложении для Android, и код этой кнопки сводит меня с ума. По-видимому, есть некоторые имитации относительно того, сколько предложений «если» вы можете сделать в своей программе кнопок?

Вот некоторые фрагменты (кстати, etX = EditText):

button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
    if (et1.getText().length()+et2.getText().length()==10) {keys++; oneStr=oneStr+et1.getText().toString()+" "+et2.getText().toString()+" ";}
    if (et3.getText().length()+et4.getText().length()==10) {keys++; oneStr=oneStr+et3.getText().toString()+" "+et4.getText().toString()+" ";}
    if (et5.getText().length()+et6.getText().length()==10) {keys++; oneStr=oneStr+et5.getText().toString()+" "+et6.getText().toString()+" ";}

Это продолжается до:

    if (et293.getText().length()+et294.getText().length()==10) {keys++; oneStr=oneStr+et293.getText().toString()+" "+et294.getText().toString()+" ";}
    if (et295.getText().length()+et296.getText().length()==10) {keys++; oneStr=oneStr+et295.getText().toString()+" "+et296.getText().toString()+" ";}

Так что всего 148 предложений "если"!

Точный текст ошибки затмения: "Слишком много синтетических параметров, эмулированный параметр val $ et253 превышает ограничение в 255 слов, подходящих для параметров метода "

Если я удаляю все предложения «если» после и включительно:

if (et253.getText().length()+et254.getText().length()==10) {keys++; oneStr=oneStr+et253.getText().toString()+" "+et254.getText().toString()+" ";}

Ошибка больше не существует, и программа работает для многих предложений if, которые уже существуют. Так что очевидно что-то не так, но я не понимаю ошибку?

Так что, когда я перейду от 148 предложений if к 125 if, приложение может скомпилироваться!

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Из того, что я понимаю, когда Java реализует замыкания (и здесь я использую термин свободно), она обманывает и создает копию указанной переменной в форме синтетического параметра. Из ошибки видно, что существует верхний предел для количества переменных, которые могут быть извлечены в ваш анонимный внутренний класс с помощью этого механизма.

Скорее всего, если вы конвертируете etnnn переменные в массив et[nnn], проблема исчезнет, ​​потому что вам нужно будет ввести только одну переменную вместо сотен.

Одна ссылка, которая, вероятно, связана с вашей проблемой, взята из Спецификация Java VM, раздел 4.10 :

Количество параметров метода ограничено 255 по определению дескриптор метода (§4.3.3), где ограничение включает одну единицу для это в случае вызова экземпляра или метода интерфейса. Заметка что дескриптор метода определен в терминах понятия метода длина параметра, в котором параметр типа long или double добавляет две единицы к длине, поэтому параметры этих типов далее уменьшить лимит.

0 голосов
/ 12 марта 2012

Проверьте, компилируется ли он при выполнении 148 действий в цикле.Если это работает, используйте цикл для выполнения аналогичного действия 148 раз ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...