2012-01-26 8 views
5
final Criteria crit = session.createCriteria(MyClass.class); 
final List<MyClass> myClassList = crit.list(); 

結果: 型の安全性:List型の式は避けタイプの安全上の警告この中

が警告を削除する彼らの方法されたリストに準拠するように未チェックの変換を必要とする、など

final List<MyClass> myClassList = Collections.checkedList(MyClass.class, crit.list()); 

答えて

6

さて、あなたは使用することができます:

@SuppressWarnings("unchecked") 
私はこれを使用してエラーが出ます

before宣言...

これは警告を抑制するだけで、コードを安全にするための何もしません。この場合、私は個人的にこれについて十分満足しています。私はHibernateが正しいことをすると信じています。

+0

@EvertonAgner:私は質問の「警告を取り除く」ビットに行っていました。 –

+0

ええ、私は知っている...私は彼が問題を解決したいのか、彼がただ警告についてのOCDを持っているのかを知るべきであることを意味した........私のように* lol – everton

+2

型指定されていないコレクションを返すサードパーティのAPIを使用すると、警告を抑制する以外に便利なことはあまりありません。コレクションの要素が実際に正しいタイプであることを保証できる理由を説明するコメントを追加します。 –

4
あなたのコードで

final List<MyClass> myClassList 
    = Collections.checkedList(MyClass.class, crit.list()); 

あなただけcheckedList()に引数の順序を逆にする必要があります。

Btwでは、コードをより簡潔にするためにメソッドを静的にインポートできます。 また、btwについてはわかりませんでしたcheckedList() - ヘッドアップのおかげで!

編集checkedList()は、あなたが望むことをしません - 私が答える前に正しく考えていれば分かるはずです。

checkedList()は、リストに追加されたすべての要素のタイプをチェックし、直ちに失敗します。あなたが間違ったタイプを入れることを可能にし、検索時にのみ失敗する通常のリストとは対照的に。あなたのケースでは、あなたが自分でアイテムを挿入するつもりはないので、違いはありません(私は推測します)。

Jon Skeetの回答(@SuppressWarnings("unchecked"))が正しいです。

+0

私はまだ警告を受ける...パラメターを反転させた後 – NimChimpsky

+0

残念です - それほど注意深く見ていませんでした。より良い情報で私の返信を編集しようとしています。 –

1

私にとっては、型の安全性の警告を回避する最善の方法は、この記事で述べているMatt Quailようです:

@SuppressWarnings("unchecked") 
public static <T> List<T> listAndCast(Criteria crit) { 
    List<T> list = crit.list(); 
    return list; 
} 

そしてのみ:このように、How to avoid type safety warnings with Hibernate HQL results?、キャストヘルパーを書いて、代わりにクエリの条件でこの方法を呼び出す必要があります:

List<MyClass> myClassList = listAndCast(crit); 

おはようございます!

関連する問題