求泛型的Class
2015-10-31 22:30
239 查看
项目开发中为了减少重复代码,常常会使用到Java泛型。有时候就需要求泛型的类型。
GenericFoo.java是基类
运行结果
查了一些帖子:子类(GenericFooChild)在集成父类(GenericFoo)时不能还写抽象类,需要传入具体的类别
所以:
需要将GenericFooChild修改为:
运行结果
还有一个一种办法可以求泛型的类型:
在构造器中,传入具体的泛型类型:
父类修改为【添加含参构造函数,getBeanClass()可以直接返回beanClass】:
子类和JUnit测试类,也要相应的修改
运行结果:
参考:(翻译)反射处理java泛型
GenericFoo.java是基类
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; /** * Created by li on 2015/10/31. */ public abstract class GenericFoo<T> { protected Logger logger = LoggerFactory.getLogger(this.getClass()); private Class<T> beanClass; public Class<T> getBeanClass(){ logger.debug("this: " + this.getClass() + "\t Super: " + getClass().getGenericSuperclass()); Type type =getClass().getGenericSuperclass(); // if (!ParameterizedType.class.isAssignableFrom(type.getClass())) { // return null; // } ParameterizedType paraType = (ParameterizedType)getClass().getGenericSuperclass(); logger.debug(type.toString()); beanClass = (Class<T>) paraType.getActualTypeArguments()[0]; logger.debug("beanClass: " + beanClass); return this.beanClass; } }GenericFooChild.java是子类
public class GenericFooChild<T> extends GenericFoo { }编写Junit测试类
import com.cqs.models.user.model.User; import org.junit.Test; /** * Created by li on 2015/10/31. */ public class GenericFooChildTest { private GenericFooChild child = new GenericFooChild(); @Test public void testGetBeanClass() throws Exception { child.getBeanClass(); } }
运行结果
查了一些帖子:子类(GenericFooChild)在集成父类(GenericFoo)时不能还写抽象类,需要传入具体的类别
所以:
需要将GenericFooChild修改为:
import com.cqs.models.user.model.User; /** * Created by li on 2015/10/31. */ public class GenericFooChild extends GenericFoo<User> { }
运行结果
还有一个一种办法可以求泛型的类型:
在构造器中,传入具体的泛型类型:
父类修改为【添加含参构造函数,getBeanClass()可以直接返回beanClass】:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Created by li on 2015/10/31. */ public abstract class GenericFoo<T> { protected Logger logger = LoggerFactory.getLogger(this.getClass()); private Class<T> beanClass; public GenericFoo(Class<T> beanClass) { this.beanClass = beanClass; } public Class<T> getBeanClass(){ logger.debug("beanClass: " + beanClass); return this.beanClass; } }
子类和JUnit测试类,也要相应的修改
import com.cqs.models.user.model.User; /** * Created by li on 2015/10/31. */ public class GenericFooChild extends GenericFoo<User> { public GenericFooChild(Class<User> beanClass) { super(beanClass); } }
import com.cqs.models.user.model.User; import org.junit.Test; /** * Created by li on 2015/10/31. */ public class GenericFooChildTest { private GenericFooChild child = new GenericFooChild(User.class); @Test public void testGetBeanClass() throws Exception { child.getBeanClass(); } }
运行结果:
参考:(翻译)反射处理java泛型
相关文章推荐
- 五:理解控件的运行机制(例:基于Control命名空间的简单控件)
- 四:理解Page类的运行机制(例:基于PageStatePersister的页面状态存取)
- Openssl no OPENSSL_Applink 错误解决
- Leetcode130: Jump Game
- 插入排序
- 三:理解Page类的运行机制(例:在render方法中生成静态文件)
- 初识Git
- Android内存优化(2)
- HDOJ 5522 Numbers(水,暴力)
- 最佳缝合线算法(图像融合)
- go语言实现设计模式(一):策略模式
- 二:理解ASP.NET的运行机制(例:基于HttpHandler的URL重写)
- 包+类导入+静态导入+类放入包中+包作用域
- 非负矩阵分解(NMF,Nonnegtive Matrix Factorization)
- 一个Stack的Java示例图解分析
- 一:理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)
- JS之简易计算器
- 03.Curator深入使用
- 单链表实现(2)
- python-flask简单服务器框架