关于java泛型的使用中遇到的问题
这个问题描述起来有点困难。举这么一个例子吧,我在用struts2+spring+hibernate做系统,按照一般的套路,我必须写DAO实现对hibernate对数据库的访问的封装。
hibernate中对数据库记录的获取有个get方法。比如我要获取user表的记录(假设对应的类为User.class),使用session.get(User.class,new Integer(1));
我的数据库中有很多表,按照传统的方法,我得写很多个DAO,比如user表,product表(假设对应的类为Product.class)对应的DAO分别为(只示意性写出关键部分):
public class UserDao {
public User get(Integer I) {
session.get(User.class,I);
}
}
public class ProductDao {
public Product get(Integer I) {
session.get(Product.class,I);
}
}
仔细研究,发现两个DAO相似度很高,我就想使用泛型把它们合二为一,我写了下面的泛型类
public class Dao<T,KEY> {
public Product get(KEY key) {
session.get(?,key);
}
}
这样,我想获得user表的记录时我就这样写
Dao<User,Integer> userDao;
userDao.get(new Integer(1));
我想获得product表的记录时这样写:
Dao<Product,Integer> pruductDao;
productDao.get(new Integer(1));
但是,现实和理想总是差距很大,问题出现了,就是上面的问号的地方,我不知把类T的类名写在问号的位置。我尝试直接写T、T.class、Class(T)等等都无法编译。