警告を取り除くための正しい手順は次のとおりです。
- 何よりもまず、チェックされていないキャストが安全であることを証明し、その理由を文書化します
- 次に、チェックされていないキャストを実行
@SuppressWarnings("unchecked")
し、変数宣言に注釈を付けます(メソッド全体ではありません)。
だからこのようなもの:
// this cast is correct because...
@SuppressWarnings("unchecked")
GenericInterface<String> mockedInterface =
(GenericInterface<String>) EasyMock.createMock(GenericInterface.class);
ガイドライン
以下は、Effective Java 2nd Editionからの抜粋です。項目24:チェックされていない警告を削除します。
- 可能なすべてのチェックされていない警告を排除します。
- 警告を排除できず、警告を引き起こしたコードがタイプセーフであることを証明できる場合は、(そしてその場合にのみ)
@SuppressWarning("unchecked")
注釈を付けて警告を抑制します。
- 常に
SuppressWarning
可能な限り最小のスコープで注釈を使用してください。
- アノテーションを使用するたび
@SuppressWarning("unchecked")
に、安全な理由を示すコメントを追加してください。
関連する質問
キャストのリファクタリング
ほとんどの場合、生成された内でチェックされていないキャストを実行することも可能ですcreateMock
。これは次のようになります。
static <E> Set<E> newSet(Class<? extends Set> klazz) {
try {
// cast is safe because newly instantiated set is empty
@SuppressWarnings("unchecked")
Set<E> set = (Set<E>) klazz.newInstance();
return set;
} catch (InstantiationException e) {
throw new IllegalArgumentException(e);
} catch (IllegalAccessException e) {
throw new IllegalArgumentException(e);
}
}
その後、他の場所で簡単に行うことができます:
// compiles fine with no unchecked cast warnings!
Set<String> names = newSet(HashSet.class);
Set<Integer> nums = newSet(TreeSet.class);
も参照してください