Как использовать TimerTask с лямбда-выражениями?JAVA

Программисты JAVA общаются здесь
Anonymous
Как использовать TimerTask с лямбда-выражениями?

Сообщение Anonymous »


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

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

Runnable runnable = новый Runnable() { @Override общественный недействительный запуск () { проверитьКаталог(); } }; В Java 8 может быть выражено обоими следующими способами:

Runnable runnable = () -> checkDirectory(); или

Runnable runnable = this::checkDirectory; Это связано с тем, что Runnable — это функциональный интерфейс, имеющий только один (абстрактный) общедоступный метод, отличный от стандартного.

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

TimerTask timerTask = новый TimerTask() { @Override общественный недействительный запуск () { проверитьКаталог(); } }; Выглядит знакомо, правда?
Однако использование лямбда-выражения не работает, поскольку TimerTask является абстрактным классом, хотя он имеет только один абстрактный общедоступный метод, отличный от стандартного, он не является интерфейсом и, следовательно, не является функциональным интерфейсом.
Он также не подвергается рефакторингу в интерфейс с реализациями по умолчанию, поскольку он переносит состояние, поэтому в этом случае это невозможно сделать.

Итак, мой вопрос: есть ли способ использовать лямбда-выражения при создании TimerTask?

Я хотел следующего:

Таймер timer = новый таймер(); timer.schedule(this::checkDirectory, 0, 1 * 1000); Вместо какого-то уродливого анонимного внутреннего класса, есть ли способ сделать его лучше?

Вернуться в «JAVA»