Параметры метода в двойной инициализации?

Я создаю HashMap встроенный в двойные скобки внутри функции:

public void myFunction(String key, String value) {
    myOtherFunction(
        new JSONSerializer().serialize(
            new HashMap<String , String>() {{
                put("key", key);
                put("value", value.);
            }}
        )
    );
}

и я получаю эти ошибки:

myClass.java:173: error: local variable key is accessed from within inner class; needs to be declared final
                        put("key", key);
                                   ^
myClass.java:174: error: local variable value is accessed from within inner class; needs to be declared final
                        put("value", value);
                                     ^
2 errors

Как можно вставить параметры метода в Object двойная скобка инициализирована?

2 ответа

Решение

Объявите ваши параметры как final:

public void myFunction(final String key, final String value)

Кроме того, вы могли бы взглянуть на эффективность Java "Двойная инициализация скобки"?

Компилятор будет жаловаться, если вы используете не окончательные локальные переменные во внутренних классах, исправьте это следующим образом:

public void myFunction(final String key, final String value) {
    myOtherFunction(
        new JSONSerializer().serialize(
            new HashMap<String , String>() {{
               put("key", key);
               put ("value", value.);
            }}
        )
    );
}
Другие вопросы по тегам