Предупреждение о времени компиляции при игнорировании возвращаемого объекта

2

Я знаю, что Java обычно позволяет не заботиться о возвращенном объекте, если он присутствует в методе, но в этом случае я хочу убедиться, что пользователь Api добавляет возвращаемый экземпляр в список, иначе он будет выполнен прямо сейчас.

Обычная Java:

Runnable someTask() {
    ...
}

someTask(); // ok

Должно быть

Runnable someTask() {
    ...
}

addToExecutionList(someTask()); // ok
someTask(); // gives warning

Есть ли способ предотвратить это с помощью предупреждения времени компиляции?

Теги:
compiler-errors
compiler-warnings

3 ответа

4
Лучший ответ

Есть ли способ предотвратить это, скажем, предупреждение о компиляции?

Нет. Нет способа заставить вызывающего пользователя использовать возвращаемое значение метода. Что-то вроде FindBugs может иметь возможность сообщать об этом как обманном коде, если это вам поможет.

  • 0
    Хм ... Можете ли вы придумать решение во время выполнения?
  • 1
    @ Теодор: Не совсем. Я думал о чем-то с финализатором, но это было бы очень смешно и не всегда было бы уместно.
Показать ещё 1 комментарий
2

Вы можете добавить параметр в someTask и позволить someTask позаботиться о том, чтобы добавить себя в этот список:

void someTask(List<Runnable> executionList) {
  // ...
  executionList.add(task);
}

Но, конечно, это не помешает передать бессмысленный список этому методу.

Если вы хотите убедиться, что runnable всегда добавляется в очень специальный список, тогда вы должны изменить api, чтобы пользователь не смог вызвать someTask, но увидит какой-то "factory", который создает задачу и добавляет ее в этот список. Который должен быть внутренним, чтобы никто не мог удалить вновь созданную задачу из этого списка (и так далее;))

  • 0
    Первое решение может быть реализовано в виде AbstractTask с List<Runnable> executionList в качестве параметра конструктора и executionList.add(this) в его конструкторе, а список бессмысленных элементов может быть проверен во время выполнения, может не улавливать все ошибки, но некоторые ,
2

Предупреждения о времени компиляции относятся только к наиболее распространенным ошибкам. Нормальная практика - игнорировать возвращаемые значения.

То, что вы можете использовать, - это инструмент статического анализа, например, поиск ошибок, checkstyle или статический анализ IntelliJ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню