Instanceof和泛型

/*
		 * T表示泛型,子类继承了父类,父类有参数为泛型,比如 
		 * 父类public class FatherAction
		 * 子类public class SonAction extends FatherAction
		 * 所以这里需要一个实体类  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
		 * 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 modelC= (Class) params[index];
		 * 
		 * 已经获取到子类的具体参数了,现在在分类中把这个参数赋值给泛型
		 * T model=modelC.newInstance();
		 * 
		 * 而在子类中,可以直接使用model.getUserName();
		 * 
		 *
		 * instanceof是Java、php的一个二元操作符(运算符),
		 * 和==,>,<是同一类东西。由于它是由字母组成的,
		 * 所以也是Java的保留关键字。
		 * 它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。
		 * 可以用来判断继承中的子类的实例是否为父类的实现。
		 * 相当于c#中的is操作符。java中的instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。
		 * instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
		 * 
		 * 结论:左边 是 右边 的实现即为true
		 * 当子类继承父类,如果父类中有this.class,在没有覆盖父类方法的情况下,获得的是子类
		 */

你可能感兴趣的:(Java,反射机制)