dao设计:
public interface DaoBase<T>{
//常用的方法 CRUD
void save(T t);
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
public class DaoSupport<T> implements DaoBase<T> {
// 实体的类型 即T 的类型
private Class<T> clazz;
// 实体的名称
private final String entityName;
public DaoSupport() {
clazz = GenericsUtil.getClazz(this.getClass());
this.entityName = this.clazz.getName();
System.out.println(entityName);
}
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
public class GenericsUtil {
@SuppressWarnings("unchecked")
public static Class getClazz(Class clazz){
//取得泛型类型
Type type = clazz.getGenericSuperclass();
if (!(type instanceof ParameterizedType)) {
throw new RuntimeException();
}
ParameterizedType pt = (ParameterizedType) type;
//取得实际的类型
return (Class) pt.getActualTypeArguments()[0];
}
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//具体的DAO,针对某个实体Bean
public interface UserDao extends DaoBase<User>{
}
public class UserDaoImpl extends DaoSupport<User> implements UserDao{
public UserDaoImpl(){}
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
//实体
public class User{}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
测试:
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
UserDao dao = new UserDaoImpl();
}
}
//----------------------------------------------------------------------
//----------------------------------------------------------------------
输出:User
注:这样设计可以避免类型转换,直接取到的就是User 对象了