忽略返回对象时编译时间警告

时间:2012-08-02 14:10:03

标签: java api compiler-errors compiler-warnings

我知道Java通常不允许关心返回的对象(如果从方法中出现),但在这种情况下,我想确保Api的用户将返回的实例添加到列表中,否则它将被执行直接走了。

普通Java:

Runnable someTask() {
    ...
}

someTask(); // ok

应该是

Runnable someTask() {
    ...
}

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

有没有办法用编译时警告来阻止这种情况?

3 个答案:

答案 0 :(得分:4)

  

有没有办法用编译时警告来阻止这种情况?

没有。无法强制调用者使用方法的返回值。类似FindBugs之类的内容可能会选择将其报告为狡猾的代码,如果这有助于您。

答案 1 :(得分:2)

编译时间警告仅适用于最常见的错误。通常的做法是忽略返回值。

您可以使用静态分析工具,例如查找错误,checkstyle或IntelliJ的静态分析。

答案 2 :(得分:2)

您可以向someTask添加参数,让someTask负责将自己添加到该列表中:

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

但是,当然,这不会阻止将无意义的列表传递给该方法。

如果你想确保runnable 总是添加到一个非常特殊的列表中,那么你应该更改api,以便用户无法调用{{1}但是会看到某种“工厂”创建任务并且将其添加到该列表中。哪个应该是内部的,以便没有人可以从该列表中删除新创建的任务(等等;))