笔记: 最近项目上使用hbase来存储数据,实体对象的存储大部分代码都是一样的,所以想写一个公用的dao来实现传入不同的实体对象,生成对应的dao工厂.但苦与技术能力不足,写出来的dao工厂不美观,犹如hibernate的读写操作,需要每次传入实体对象class.才能进行操作.希望能有大神来指点一二.不过在不断改进中,也学习到了一些东西.
我现在的代码:
//这里是接口类
interface dao {
public <T> T find();
}
//这里是实现dao,方法都使用泛型来定义,参数都需要传入具体的实体对象class
class daoImpl implements dao{
public <T> T find(Class<T> type);
}
这样感觉很不好(不知道为什么,就是感觉不好),不过代码是真的少.哈哈...
改版的就如同hibernate差不多
//接口,定义泛型
interface dao<T> {
}
class daoImpl<T> implements dao<T> {
private Class<T> type;
@SuppressWarnings("unchecked")
public Test2() {
//getClass().getGenericSuperclass() 得到 当前对象的直接超类的 Type
ParameterizedType parameterizedType = (ParameterizedType) getClass()
.getGenericSuperclass();
this.type = (Class<T>) parameterizedType.getActualTypeArguments()[0];
System.out.println(getClass().getGenericSuperclass());
}
}
然后每个实体对象都需要写一个dao工厂类来继承daoImpl
//这里就需要实例化泛型对象了,这样调用daoImpl无参构造方法时,才能获取到泛型的真实类型
class myDao extends daoImpl<Entity> {
}