2

休止状態で特定のIDでデータベースからオブジェクトをロードするための汎用getメソッドを取得しようとしています。メソッドを開始する前は、次のようになっていました。

public static Object getObjectFromDatabase(Class c, long id) {
    Transaction newTransaction = getSession().beginTransaction();
    Object result = getSession().get(c, id);

    newTransaction.commit();


    return result;
}

次に、次のコードを使用してジェネリック メソッドを取得しようとしました。

public static <T> T getObjectFromDatabase(Class<T> c, long id) {
    Transaction newTransaction = getSession().beginTransaction();
    T result = getSession().get(c, id);

    newTransaction.commit();


    return result;
}

残念ながらライン

   T result = getSession().get(c, id);

エラーが発生します: タイプの不一致: オブジェクトから T に変換できません

Tへの明示的なキャストを使用できることを知っています

   T result = (T) getSession().get(c, id);

しかし、このキャストを回避する方法はありますか??

ありがとうございました

4

1 に答える 1

3

いいえ - のget(Class, Serializable)メソッドSessionは return と宣言されているだけObjectです。それ自体は一般的なメソッドではないため、何らかの方法でキャストを行う必要があります。

Class.castただし、メソッドを使用してキャストをより安全にすることができます。

T result = c.cast(getSession().get(c, id));

これは、実際には何もしない「ふりをする」キャストを行うのではなく、実行時に適切にチェックされたキャストを行います。

于 2013-06-29T08:21:00.717 に答える