java 泛型 反射 封装 dao层

0)非常好
public class Child extends Base<Child>{

}

[url]http://www.2cto.com/kf/201208/150877.html[/url]

UserDao类:
package com.mrlun.oa.test;

public class UserDao extends BaseDaoImpl<Users>{

}

[url]http://blog.sina.com.cn/s/blog_86e34ca8010132ly.html[/url]
1)
public class A<T> {
private Class getActualTypeClass(Class entity) {
ParameterizedType type = (ParameterizedType) entity.getGenericSuperclass();
Class entityClass = (Class) type.getActualTypeArguments()[0];
return entityClass;
}

Class clazz = getActualTypeClass(this.getClass());
//这里的clazz就是范型T的具体类型的class了

}


[url]http://tieba.baidu.com/p/1870781710[/url]

2)
利用object,做强制转换
[url]http://www.cnblogs.com/tekkaman/p/3920309.html[/url]

3)

[url]http://outofmemory.cn/code-snippet/11387/java-create-generic-class-instance-with-newinstance-method[/url]

4)好
[url]http://developer.51cto.com/art/201009/226966_1.htm[/url]
[url]http://www.2cto.com/database/201404/296251.html[/url]

5)泛型和反射结合
/**通过反射机制查询单条记录
* @param sql
* @param params
* @param cls
* @return
* @throws Exception
*/
public <T> T findSimpleRefResult(String sql, List<Object> params,
Class<T> cls )throws Exception{
T resultObject = null;
int index = 1;
pstmt = connection.prepareStatement(sql);
if(params != null && !params.isEmpty()){
for(int i = 0; i<params.size(); i++){
pstmt.setObject(index++, params.get(i));
}
}
resultSet = pstmt.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData();
int cols_len = metaData.getColumnCount();
while(resultSet.next()){
//通过反射机制创建一个实例
resultObject = cls.newInstance();
for(int i = 0; i<cols_len; i++){
String cols_name = metaData.getColumnName(i+1);
Object cols_value = resultSet.getObject(cols_name);
if(cols_value == null){
cols_value = "";
}
Field field = cls.getDeclaredField(cols_name);
field.setAccessible(true); //打开javabean的访问权限
field.set(resultObject, cols_value);
}
}
return resultObject;

}

[url]http://www.soso.io/article/67503.html[/url]
6)
[url]http://www.oschina.net/code/snippet_1245103_33821[/url]

7)
Class<T>的作用就是指明泛型的具体类型,而Class<T>类型的变量c,可以用来创建泛型类的对象。

为什么要用变量c来创建对象呢?既然是泛型方法,就代表着我们不知道具体的类型是什么,也不知道构造方法如何,因此没有办法去new一个对象,但可以利用变量c的newInstance方法去创建对象,也就是利用反射创建对象。
[url]http://www.cnblogs.com/iyangyuan/archive/2013/04/09/3011274.html[/url]

8)
[url]http://blog.sina.com.cn/s/blog_86e34ca8010132ly.html[/url]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值