をハッシュマップ返す見ての通り、私はMap<String, String>
として戻り値の型を指定するDAOコードMyBatisのは、ここでは実数型
@Select("select * from my_table order by id limit 1")
Map<String, String> selectFirst();
です。そして今、混乱が来る:
Map<String, String> firstRow = myDao.selectFirst();
Object o = firstRow.get("id");
System.out.println(o.getClass()); // class java.lang.Integer
// java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
int id = Integer.parseInt(firstRow.get("id"));
だから私はどのようにそれが起こる可能性があり、Map<String, String>
からInteger
を取得しますか?
Daoメソッドの実際の戻り値の型がMap<String, Object>
の場合、Map<String, String>
にどのように割り当てることができますか?
Genericsは純粋なコンパイル時の概念です。実行時にjavaは型消去と呼ばれるものを使用します。したがって、Mapを定義していても、実行時javaはそれを純粋なMapオブジェクトとして認識します。ジェネリックスがどのように機能するかを詳しく読んだら、事柄はより明確になるだろう。 –
@VishalKamat Javaジェネリックスにはいくつかの制限があることを理解している。しかし型の消去はMyBatisが私にDaoメソッドから 'Map'を返すことを間違って許してしまう言い訳ではありません。 –
duleshi