1. 一般的なプログラミングのアドバイス
このメッセージは、静的変数とインスタンス変数のスコープの違いを認識していない初心者プログラマーにとって一般的な落とし穴であるため、潜在的なプログラミングの間違いについて警告するためにあります。
removeApple
ただし、コンパイラ エラーを発生させずにメソッドの実際のバージョンを宣言できる場合は、static
おそらく宣言する必要があります。これにより、警告が処理され、このメソッドがクラスの特定のインスタンスとは何の関係もないことが明確になります。
2. 並行性に関する懸念事項
この警告のもう 1 つの側面は、スレッドの安全性に関するものです。インスタンスからフィールドに書き込むと、static
スレッド間でクラス インスタンスを共有しなくても、異なるスレッドから同時更新を行う可能性が開かれます。
コードにスレッド セーフが必要ない場合 (一般的には問題ありません)、何もする必要はありません。必要な場合は、フィールドのすべての更新を同期するか、AtomicInteger
ラッパーを使用してください。
個人的には、AtomicInteger
それが最も安全なオプションであるため、選択します。他のオプションでは、クラスのすべてのフィールド更新を追跡し、それらが同期されていることを確認する必要があります。使い方AtomicInteger
はとても簡単です:
private static final AtomicInteger count = new AtomicInteger();
count.getAndIncrement()
の代わりに使用しますcount++
。