Таким образом, поскольку компилятор Java разрешает доступ к окончательным ссылкам или ссылкам на элементы в лямбда-выражениях или анонимных внутренних классах, ответ - нет. Однако вы можете (как вы, кажется, нашли) изменить состояние внутри окончательной ссылки.
Вы нашли обходной путь с AtomicInteger
, который работает в вашем конкретном случае, когда вы изменяете Integer
. Размещение вашей ссылки в окончательном массиве с одним значением будет работать для всего, хотя. Это не очень красиво, но если вы используете IntelliJ
, он предложит вам сделать это изменение, если вы попытаетесь изменить конечное состояние в такой ситуации.
Вот пример:
final int[] value = { 3 };
Consumer<Integer> consumer = input -> {
value[0] = value[0] * 2;
};
consumer.accept(100);
System.out.println(value[0]);