我知道Java通常不允许关心返回的对象(如果从方法中出现),但在这种情况下,我想确保Api的用户将返回的实例添加到列表中,否则它将被执行直接走了。
普通Java:
Runnable someTask() {
...
}
someTask(); // ok
应该是
Runnable someTask() {
...
}
addToExecutionList(someTask()); // ok
someTask(); // gives warning
有没有办法用编译时警告来阻止这种情况?
答案 0 :(得分:4)
有没有办法用编译时警告来阻止这种情况?
没有。无法强制调用者使用方法的返回值。类似FindBugs之类的内容可能会选择将其报告为狡猾的代码,如果这有助于您。
答案 1 :(得分:2)
编译时间警告仅适用于最常见的错误。通常的做法是忽略返回值。
您可以使用静态分析工具,例如查找错误,checkstyle或IntelliJ的静态分析。
答案 2 :(得分:2)
您可以向someTask
添加参数,让someTask
负责将自己添加到该列表中:
void someTask(List<Runnable> executionList) {
// ...
executionList.add(task);
}
但是,当然,这不会阻止将无意义的列表传递给该方法。
如果你想确保runnable 总是添加到一个非常特殊的列表中,那么你应该更改api,以便用户无法调用{{1}但是会看到某种“工厂”创建任务并且将其添加到该列表中。哪个应该是内部的,以便没有人可以从该列表中删除新创建的任务(等等;))