java 高新技术【9.2】 泛型类以及反射在泛型中的应用
2012-05-13 15:01
309 查看
package com.my.Util; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Collection; import java.util.Date; import java.util.Vector; public class GenericTest { /** * @param args */ public static void main(String[] args) throws Exception { //Class<Number> x = String.class.asSubclass(Number.class); Class<?> y; Class<String> x ;//Class.forName("java.lang.String"); add(3,5); Number x1 = add(3.5,3); Object x2 = add(3,"abc"); swap(new String[]{"abc","xyz","itcast"},1,2); // swap(new int[]{1,3,5,4,5},3,4); Object obj = "abc"; String x3 = autoConvert(obj); copy1(new Vector<String>(),new String[10]); copy2(new Date[10],new String[10]); //copy1(new Vector<Date>(),new String[10]); GenericDao<ReflectPoint> dao = new GenericDao<ReflectPoint>(); dao.add(new ReflectPoint(3,3)); //String s = dao.findById(1); /************************/ /*** * * 利用 反射 看 applyVector * webservice 要是说:有一个方法返回集合,这个集合没有指定具体的类型,那我就不知道要把数据转换成什么对象 * * 但是如果 你在定义的时候,指定了类型,我就知道要把数据 转换成 什么类型了。。。 * * 假如 set<E> 这里不用泛型,而到数据库查数据出来 就不知道 要把数据转换成什么类型的集合。 * * */ //Vector<Date> v1 = new Vector<Date>(); Method applyMethod = GenericTest.class.getMethod("applyVector", Vector.class); // 得到 泛型的参数类型,列表。 Type[] types = applyMethod.getGenericParameterTypes(); // 接收到 第一个参数。 ParameterizedType pType = (ParameterizedType)types[0]; // 得到原始的类型。 System.out.println(pType.getRawType()); // 得到实际 返回参数类型。。。 System.out.println(pType.getActualTypeArguments()[0]); } public static void applyVector(Vector<Date> v1){ // 通过变量自己 是没有办法 知道自己的实际类型的。。。 } private static <T> void fillArray(T[] a,T obj){ for(int i=0;i<a.length;i++){ a[i] = obj; } } private static <T> T autoConvert(Object obj){ return (T)obj; } private static <T> void swap(T[] a,int i,int j){ T tmp = a[i]; a[i] = a[j]; a[j] = tmp; } private static <T> T add(T x,T y){ return null; } public static void printCollection(Collection<?> collection){ //collection.add(1); System.out.println(collection.size()); for(Object obj : collection){ System.out.println(obj); } } public static <T> void printCollection2(Collection<T> collection){ //collection.add(1); System.out.println(collection.size()); for(Object obj : collection){ System.out.println(obj); } } public static <T> void copy1(Collection<T> dest,T[] src){ } public static <T> void copy2(T[] dest,T[] src){ } }
package com.my.Util; import java.util.Set; //dao data access object--->crud public class GenericDao<E> { public void add(E x){ } public E findById(int id){ return null; } public void delete(E obj){ } public void delete(int id){ } public void update(E obj){ } public static <E> void update2(E obj){ } public E findByUserName(String name){ return null; } public Set<E> findByConditions(String where){ return null; } }
package com.my.Util; import java.util.Date; public class ReflectPoint { private Date birthday = new Date(); private int x; public int y; public String str1 = "ball"; public String str2 = "basketball"; public String str3 = "itcast"; public ReflectPoint(int x, int y) { super(); this.x = x; this.y = y; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + x; result = prime * result + y; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final ReflectPoint other = (ReflectPoint) obj; if (x != other.x) return false; if (y != other.y) return false; return true; } @Override public String toString(){ return str1 + ":" + str2 + ":" + str3; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
更多泛型详细讲解:http://blog.csdn.net/itm_hadf/article/details/7411712
相关文章推荐
- java 高新技术【9.2】 泛型类以及反射在泛型中的应用
- java 中泛型的原理以及应用场景
- Java高新技术笔记:反射、多线程、泛型、枚举、javaBean、代理
- Java反射的高级应用,模拟开发环境IDE动态搜索类成员以及方法,。。。。。
- Java反射的高级应用,模拟开发环境IDE动态搜索类成员以及方法,。。。。。
- java入门笔记一:浅谈反射(reflect)&泛型(genericity)在通用数据访问库中的应用
- JAVA的泛型与反射的联合应用
- java 高新技术【6】 反射开发框架以及用 类加载器 管理资源和配置文件
- java学习(6) java反射以及应用
- Java反射的高级应用,模拟开发环境IDE动态搜索类成员以及方法,。。。。。
- 黑马程序员 Java高新技术-jdk1.5深入反射和泛型
- 解决实体类噩梦:联合实体类(Java反射+泛型实际应用)
- 黑马程序员——java高新技术(新特性、反射、泛型)
- java基础之反射,泛型以及注解
- 解决实体类噩梦:联合实体类(Java反射+泛型实际应用)
- Java高新技术2--JAVA中枚举的各种应用以及单例模式
- Java反射高级应用--利用反射调用类的私有方法修改私有方法值,以及替换Java的类成员数据
- Java高新技术2--JAVA中枚举的各种应用以及单例模式
- 泛型类中的通配符以及反射与 泛型
- Java反射高级应用--利用反射调用类的私有方法修改私有方法值,以及替换Java的类成员数据