は、だから私はこのようになります機能を持っている:私は、これはjavax.persistence.Query
を取り、その結果は、一般的なSet<Class>
として設定されて戻ってやっていると信じて何をJavaの「チェックされていない変換」から潜在的な実行時例外を処理する最善の方法は何ですか?
@SuppressWarnings("unchecked")
public static <E> Set<E> getSetOfClass(Query q,Class<E> clazz) {
return new LinkedHashSet<E>(q.getResultList());
}
。
これはすばらしい解決策のように思えますが、最初はそれが実際に私が思っていることを実行しているのですか?これを達成するにはこれが最善の方法ですか?私は私のclazz
paramを決して参照していないのは奇妙だと思っていますが、それは私が望むことをするようです。
第2に、これがすべて正確で分かりやすい場合、どのようなエラーが発生する可能性がありますか?私はそれが正しくないクラスを与えると、この関数はうまくいきませんが、それについてはわかりません。
私のような何かを行う場合は、次の
Query q = em.createQuery("FROM Element");
Set<Fish> s = MyUtil.getSetOfClass(q, Fish.class);
そしてFish
がElement
のスーパークラスでない場合は、次に何が起こりますか?この関数は常に正しく使用されると思いますか、そうでなければエラー処理を行うべきですか?ベストプラクティスアプローチの人々の推奨事項は何ですか?
よろしく、
グレンはgetSetOfClass
は、セット内のすべての要素がタイプE
のオブジェクトであることを保証するものではありません
未使用の 'clazz'については、実際にはclass paramを使用しません。これは、渡す必要がないからです。あなたはそのパラメータを省略してメソッドを: 'MyUtilとして呼び出すことができます。 getSetOfClass(q) 'ですが、それほど慣れていない場合はより慎重な構文です。 @Andreas_Dで推奨されているように 'clazz'パラメータを使うことをお勧めします。 –
Blaisorblade