第21天dao模型二(更为精简)之泛型的反射
来源:互联网 发布:移除数组中的重复元素 编辑:程序博客网 时间:2024/06/10 00:43
1、使用带有泛型信息的类:
a、两边都带有泛型的,一定要一致
ArrayList<String> list = new ArrayList<String>();
b、单边有泛型信息也是可以的
ArrayList<String> list = new ArrayList (); 新程序员调用老程序员的内容
ArrayList list = new ArrayList<String>(); 老程序员调用新程序员的内容
2、自定义泛型:
a、可以在定义类的后面就声明泛型,类中的实例方法就可以直接使用。
public class Demo1<T> {//类级别的泛型定义。类中的“实例方法”就可以直接使用
//<T>:泛型定义的声明。在返回值的前面
public T findOne(Class<T> clazz){
return null;
}
b、静态方法必须单独定义后才能使用。在返回值得前面定义
public static <T> void u1(T t){
}
c、可以同时生命多个泛型的定义
public static <K,V> V findValue(K k){//MAP
return null;
}
3、使用带有泛型信息的类注意事项:
只有对象类型才能作为泛型方法的实际参数
dao接口不变。
主要是实现变了,不需要写那么多代码,在basedao中做了处理即对泛型进行了反射。
import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import org.hibernate.Session;import com.itheima.dao.CustomerDao;import com.itheima.dao.Dao;import com.itheima.domain.Customer;//借助Hibernatepublic class BaseDao<T> implements Dao<T> {private Session session = null;//当做有了这个对象private Class clazz;//从哪个表中操作public BaseDao(){//泛型的反射:目的,给成员变量clazz赋值,好让查询、删除知道从哪个表中操作System.out.println(this.getClass().getName());//this:就是哪个实实在在的对象 CustomerDao cDao = new CustomerDaoImpl(); CustoemrDaoImpl的实例Type type = this.getClass().getGenericSuperclass();//获取带有泛型信息的父类 "BaseDao<Customer>" Type是Class类的接口ParameterizedType pType = (ParameterizedType)type; clazz = (Class) pType.getActualTypeArguments()[0];}public void add(T t) {session.save(t);}public void update(T t) {session.update(t);}public void delete(Serializable id) {T t =findOne(id);session.delete(t);}public T findOne(Serializable id) {System.out.println(clazz.getName());return (T) session.get(clazz, id);}}
package com.jxnu.dao.impl;import java.util.List;import com.itheima.dao.CustomerDao;import com.itheima.domain.Customer;public class CustomerDaoImpl extends BaseDao<Customer> implements CustomerDao {//public CustomerDaoImpl(){//super();//}public List<Customer> findRecords(int startIndex, int pageSize) {// TODO Auto-generated method stubreturn null;}}
package com.jxnu.dao.impl;import java.util.List;import com.itheima.dao.UserDao;import com.itheima.domain.User;public class UserDaoImpl extends BaseDao<User> implements UserDao {@Overridepublic List<User> findAll() {// TODO Auto-generated method stubreturn null;}}
实现层减少了代码。
关键代码是:
private Class clazz;//从哪个表中操作
public BaseDao(){
//泛型的反射:目的,给成员变量clazz赋值,好让查询、删除知道从哪个表中操作
System.out.println(this.getClass().getName());
//this:就是哪个实实在在的对象 CustomerDao cDao = new CustomerDaoImpl(); CustoemrDaoImpl的实例
Type type = this.getClass().getGenericSuperclass();//获取带有泛型信息的父类 "BaseDao<Customer>" Type是Class类的接口
ParameterizedType pType = (ParameterizedType)type;
clazz = (Class) pType.getActualTypeArguments()[0];
}
- 第21天dao模型二(更为精简)之泛型的反射
- 第21天之dao模型
- 反射机制实现DAO的泛型
- 利用反射泛型编写通用的Dao
- 一次愉快的“DAO模式之旅”(二)
- 一次愉快的“DAO模式之旅”(二)
- 构建中小企业的信息系统(四):更为实用的动态企业应用平台《二》
- java增强之泛型练习2:泛型DAO、通过反射获取泛型参数
- J2EE 之DAO设计模式(二)
- 精简的SQL二(T-SQL)
- C++对象模型简介(二)——《深度探索C++对象模型》精简笔记
- 第21天注解的反射
- 注解+反射+JDBC,实现一个简易的泛型DAO接口
- 注解+反射+JDBC,实现一个简易的泛型DAO接口
- 注解+反射+JDBC,实现一个简易的泛型DAO接口
- Java 利用反射、泛型实现dao层的增删改查
- 反射(DAO层的设计)<学习随笔>
- DaoFactory(使用反射技术创建Dao的实现类)
- intent 使用集合
- linux常用命令
- VS2010 2012 开发下一些常用功能收集日志
- C# 保存图片时压缩(压缩要保存的图片)
- tmp
- 第21天dao模型二(更为精简)之泛型的反射
- POJ 3170 BFS 水题
- 设计模式学习(一) 单例模式
- 百度面试题1
- C语言 文件操作函数
- Java和Android文件操作
- 上传漏洞科普[3]-MIME验证
- 信息系统修改版 c语言 控制台版
- ubuntu12.04 下 利用 qemu kgdb 调试kernel