java通过反射获取泛型参数
2017-08-07 17:13
477 查看
测试一种便捷开发的模型,常用于数据库的D、层次。其中用到反射来获取泛型参数。
首先定义一个Generictor接口,定义接口方法。
然后实现类:
测试类:
而只需要定义相应的接口即可,实现类都集成在GeneratorImpl中,扩展方便,集成度也很高。
首先定义一个Generictor接口,定义接口方法。
/** * */ package com.zjq.container; /** * @author zhangjiaqi * 写一个生成器接口 * */ public interface Generator<T> { /** * @return * 返回一个T所对应的实例 */ public T next(); }
然后实现类,
然后实现类:
package com.zjq.container; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class GeneratorImpl<T> implements Generator<T>{ @SuppressWarnings("unchecked") @Override public T next() { Type t=this.getClass().getGenericSuperclass(); Type actualTypeArguments=((ParameterizedType)t).getActualTypeArguments()[0]; try { Class<?> c3= (Class<?>) actualTypeArguments; return (T) c3.newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null; } }CatDao类:
package com.zjq.container; public interface CatDao extends Generator<Cat>{ }CatDao的实现类:
package com.zjq.container; public class CatDaoImpl extends GeneratorImpl<Cat> implements CatDao{ }
测试类:
package com.zjq.container; public class Test { public static void main(String[] args) { CatDaoImpl catDaoImpl=new CatDaoImpl(); System.out.println(catDaoImpl.next().getName()); } }输出:
猫假如Cat这个类是数据库的对应的类,使用这种模式可以增加Dog类,Fox类等,
而只需要定义相应的接口即可,实现类都集成在GeneratorImpl中,扩展方便,集成度也很高。
相关文章推荐
- java增强之泛型练习2:泛型DAO、通过反射获取泛型参数
- java中通过反射获取泛型的参数类型
- java基础-反射 --通过反射 获取泛型实际类型参数
- java再复习——通过反射获取到方法的参数和返回值的泛型类型
- java 通过反射获取泛型的类型
- java通过反射获取私有的构造方法,及反射擦除泛型数据类型约束
- Java通过反射获取泛型实际类型总结(什么可获取,什么不可获取)
- 通过反射获取泛型的参数类型信息
- 通过java反射技术获取泛型的真实类型并对其实例化
- java通过读取本地文件获取反射方法参数,执行对象方法
- java 通过反射获取方法参数列表名称
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- Java 通过反射获取一个Field对象的泛型类型
- Java中通过反射获取泛型实例
- 通过反射获取泛型参数类型
- java取得泛型的参数类型(Gson通过借助TypeToken获取泛型参数的类型的方法)
- java 通过反射获取泛型的类型
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- 通过反射获取父类中的泛型参数对应的Class对象