2

我知道 Java 通常允许不关心方法中返回的对象,但在这种情况下,我想确保 Api 的用户将返回的实例添加到列表中,否则它将立即执行。

纯Java:

Runnable someTask() {
    ...
}

someTask(); // ok

应该

Runnable someTask() {
    ...
}

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

有没有办法通过编译时警告来防止这种情况?

4

3 回答 3

4

有没有办法通过编译时警告来防止这种情况?

不,没有办法强制调用者使用方法的返回值。如果对您有帮助的话,像FindBugs这样的东西可能会选择将其报告为不可靠的代码。

于 2012-08-02T14:12:18.723 回答
2

编译时警告仅针对最常见的错误。忽略返回值是正常的做法。

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

于 2012-08-02T14:13:32.737 回答
2

您可以添加一个参数someTask并让其someTask自行添加到该列表中:

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

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

如果您想确保始终将可运行对象添加到一个非常特殊的列表中,那么您应该更改 api,以便用户无法调用someTask但会看到某种创建任务的“工厂”将其添加到该列表中。这应该是内部的,这样没有人可以从该列表中删除新创建的任务(等等;))

于 2012-08-02T14:27:19.463 回答