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

パラメータを追加して、そのリストに自分自身を追加することができsomeTaskますsomeTask

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

しかしもちろん、それは無意味なリストをそのメソッドに渡すことを妨げるものではありません。

ランナブルが常に非常に特別なリストに追加されることを確認したい場合は、API を変更して、ユーザーが呼び出すことはできませんがsomeTask、タスクを作成しそのリストに追加します。新しく作成されたタスクをそのリストから誰も削除できないように、これは内部にある必要があります(など;))

于 2012-08-02T14:27:19.463 に答える
2

コンパイル時の警告は、最も一般的なエラーのみを対象としています。戻り値を無視するのが通常のやり方です。

使用できるのは、バグの検出、checkstyle、IntelliJ の静的解析などの静的解析ツールです。

于 2012-08-02T14:13:32.737 に答える