Конечный счетчик цикла for?

У меня есть этот код:

    List<Runnable> r = new ArrayList<>();
    for(int i = 0; i < 10; i++) {
        r.add(new Runnable() {

            @Override
            public void run() {
                System.out.println(i);
            }
        });
    }

Это, очевидно, не компилируется, потому чтоi должен быть последним, чтобы использоваться в анонимном классе. Но я не могу сделать это окончательным, потому что это не так. Чтобы ты делал? Решение состоит в том, чтобы дублировать это, но я думал, что мог бы быть лучший способ:

    List<Runnable> r = new ArrayList<>();
    for(int i = 0; i < 10; i++) {
        final int i_final = i;
        r.add(new Runnable() {

            @Override
            public void run() {
                System.out.println(i_final);
            }
        });
    }

РЕДАКТИРОВАТЬ просто чтобы прояснить ситуацию, я использовал здесь Runnable в качестве примера, вопрос на самом деле об анонимных классах, которые могут быть чем угодно.

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

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