2016-10-21 2 views
-2

送信クラスごとにキャストされたオブジェクトを返すメソッドを使用しています。コレクションを<T>にT.classでキャスト

// Student student = (Student) get(Student.class, 19L); 
Student student = get(Student.class, 19L); // Working fine 

public <T> T get(Class<T> clazz, Long id) { 
    Object object = hibernateTemplate.get(clazz, id); 
    return Primitives.wrap(clazz).cast(object); 
} 

でも、コレクションは何ですか? 以下のメソッドから、このように渡されたクラスとして常にキャストされたListを返すメソッドを呼び出すとします。

List<Student> list = get(Student.class); // Error 

public List<?> get(Class clazz) { 
    DetachedCriteria criteria = DetachedCriteria.forClass(clazz); 
    List<?> list = hibernateTemplate.findByCriteria(criteria); 
    return ????; // What should I return from here ? 
} 

最後の方法で返す必要はありますか?

+0

あなたはリストを返信したくないですか? –

答えて

3
public <T> List<T> get(Class<T> clazz) { 
    DetachedCriteria criteria = DetachedCriteria.forClass(clazz); 
    List<T> list = (List<T>)hibernateTemplate.findByCriteria(criteria); 
    return list; 
} 
+0

これは、あなたが変更したものとその理由を説明した方が良い答えになります。また、そのキャストは安全ではありません。すべての警告を有効にすると、コンパイラから通知されます。 – VGR

+0

ありがとう、これはうまく動作します。 –

+0

の代わりにを使用しています。これは何か問題を生み出していますか? –

関連する問題