Чтобы избежать этого, установите его как «окончательный», чтобы программист не делал «подверженный ошибкам» код.

могу понять, гдеfinal ключевое словодействительно удобно, когда он используется в параметрах метода.

Если мы исключим использование анонимных классов, читаемость и декларацию намерений, то это кажется мне почти бесполезным.

Обеспечение того, что некоторые данные остаются постоянными, не так сильно, как кажется.

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

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

Рассмотрим простой пример теста ниже. Этот тест проходит, хотя метод изменил значение заданной ссылки, но не имеет никакого эффекта.

public void testNullify() {
    Collection<Integer> c  = new ArrayList<Integer>();      
    nullify(c);
    assertNotNull(c);       
    final Collection<Integer> c1 = c;
    assertTrue(c1.equals(c));
    change(c);
    assertTrue(c1.equals(c));
}

private void change(Collection<Integer> c) {
    c = new ArrayList<Integer>();
}

public void nullify(Collection<?> t) {
    t = null;
}

Ответы на вопрос(12)

Ваш ответ на вопрос