自定义泛型-------泛型类和反射泛型
1,泛型类
如果一个类多处都要用到同一个泛型,这时可以把泛形定义在类上(即类级别的泛型)这个比较简单举个例子:
class Demo<T> {
//在类上定义的泛形只对类的非静态成员有效
public void run(T t){
}
public void eat(T t){
}
public static <T> void test(T t){
}
}
2,反射泛型,这个比较的强大,做为新手,只知道里面的一部分功能,我就用个例子来描述下吧,
先设计一个Person实体
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
现在我要写一个DAO,而通过反射泛型和可以写一个通用性很好的Dao;
public class BasicDao<T> {
private Class<T> clazz;
@SuppressWarnings("unchecked")
// 写个无参的构造方法,得到其子类要处理的实体
public BasicDao() {
clazz = (Class<T>) this.getClass();// 得到调用者的字节码
ParameterizedTypeImpl type = (ParameterizedTypeImpl) clazz
.getGenericSuperclass();// 得到调用者父类的泛型类型
Type typ[] = type.getActualTypeArguments();//得到泛型类型里面的具体参数数组(用处理的实体类型),在本例中是要得到Person
System.out.println(typ[0]);//打印第一个参数(Person)
}
/* 增加 */
public void add(T t) {
}
/* 查找一个 */
public T find(String id) {
return null;
}
/* 全部查找 */
public List<T> find() {
return null;
}
/* 删除 */
public void delete(String id) {
}
/* 更新 */
public void update(String id) {
}
}
用具体类型的Dao来继承basicdao
public class PersonDao extends BasicDao<Person>{
}
这个类里面一句代码都不用写就有了增,删,改,查功能
再写个测试类
public class GenericDemo {
public static void main(String args[]){
PersonDao pd = new PersonDao();//实例化PersonDao时调用BasicDao中的构造方法
Person t = new Person();
String id = null;
pd.add(t);
pd.delete(id);
pd.find();
pd.find(id);
}
}
不知道什么地方有没有写错,高手多多指教额!!!