ガード対象のフィールドが final でない @GuardedBy アノテーションを報告します。

非 final フィールドをガードすると、そのフィールド自体ではなく、フィールドの値 (可変) がロックされます。そのため、予期しない競合状態が発生する可能性があります。

例:


    private ReadWriteLock lock = new ReentrantReadWriteLock(); // 非 final のフィールドをガード
    private Object state;

    @GuardedBy("lock")
    public void bar() {
        state = new Object();
    }

サポート対象の @GuardedBy アノテーションは以下の通りです。