Как использовать TimerTask с лямбдами?

Как вы, наверное, знаете, вы можете использовать лямбды в Java 8, например, для замены анонимных методов.

Здесь можно увидеть пример Java 7 против Java 8:

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        checkDirectory();
    }
};

Может быть выражено как оба следующих способа в Java 8:

Runnable runnable = () -> checkDirectory();

или же

Runnable runnable = this::checkDirectory;

Это потому чтоRunnable является функциональным интерфейсом, имеющим только один (абстрактный) публичный метод не по умолчанию.

Однако ... ДляTimerTask у нас есть следующее:

TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        checkDirectory();
    }
};

Выглядит знакомо, правда?
Использование лямбда-выражения не работает, потому чтоTimerTask является абстрактным классом, хотя у него есть только один абстрактный публичный метод не по умолчанию, он не является интерфейсом и, следовательно, не имеет функционального интерфейса.
Он также не реорганизован в интерфейс с реализациями по умолчанию, потому что он несет состояние, так что это не может быть сделано тогда.

Так что мойвопрос: Есть ли способ использовать лямбды при построенииTimerTask?

То, что я хотел, это следующее:

Timer timer = new Timer();
timer.schedule(this::checkDirectory, 0, 1 * 1000);

Вместо какого-то уродливого анонимного внутреннего класса, есть ли способ сделать его лучше?

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

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