Instanceof和泛型

Java泛型与反射实践
本文详细介绍了如何在Java中利用反射机制获取泛型参数,并将这些参数应用于实际的类实例化过程。通过一个具体的例子展示了父类如何通过子类获取泛型的实际类型。
/*
		 * T表示泛型,子类继承了父类,父类有参数为泛型,比如 
		 * 父类public class FatherAction<T>
		 * 子类public class SonAction extends FatherAction<TheUser>
		 * 所以这里需要一个实体类  public class TheUser{private String username; private String password; //set和get方法略}
		 * 
		 * 父类方法内:
		 * 1、使用Class modelClass=this.getClass()获得子类;this.getClass()=class test.SonAction
		 * 2、使用modelClass.getGenericSuperclass(); 得到泛型父类+具体化的参数,其实就是他父类自己获取了自己,不同之处在于是通过子类获得自己,所以带有了子类的属性,即泛型参数已经被具体化了;
		 * Type genType = modelClass.getGenericSuperclass():genType=test.FatherAction<test.TheUser>
		 * 3、父类获取具体参数的数组序列 Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
		 * 对于代码级别需要做个判断:// 如果没有实现ParameterizedType接口,即不支持泛型,直接返回Object.class
		 * if (!(genType instanceof ParameterizedType)){return Object.class;}
		 * 然后是越界判断
		 * if (index >= params.length || index < 0){throw new RuntimeException("你输入的索引" + (index < 0 ? "不能小于0" : "超出了参数的总数"));}
		 * 最后是获取父类中获取这个具体的参数
		 * if (!(params[index] instanceof Class)){return Object.class;}
		 * Class<T> modelC= (Class) params[index];
		 * 
		 * 已经获取到子类的具体参数了,现在在分类中把这个参数赋值给泛型
		 * T model=modelC.newInstance();
		 * 
		 * 而在子类中,可以直接使用model.getUserName();
		 * 
		 *
		 * instanceof是Java、php的一个二元操作符(运算符),
		 * 和==,>,<是同一类东西。由于它是由字母组成的,
		 * 所以也是Java的保留关键字。
		 * 它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。
		 * 可以用来判断继承中的子类的实例是否为父类的实现。
		 * 相当于c#中的is操作符。java中的instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。
		 * instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
		 * 
		 * 结论:左边 是 右边 的实现即为true
		 * 当子类继承父类,如果父类中有this.class,在没有覆盖父类方法的情况下,获得的是子类
		 */

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值