看了视频,老师讲的很细,写点note, 自己的理解,可能有误.仅供自己参考.
Method[] methods = c1.getMethods(); //public 和从父类获得的方法 Method[] methods = c2.getDeclaredMethods();//该类所声明的所有方法
然后根据方法获得方法的方法名,返回值类型,参数类型信息等 得到方法名: String methodName = methods[i].getName(); 得到返回值类类型: Class returnType = methods[i].getReturnType(); 返回值类型: returnType.getName(); 得到参数的类类型: Class[] params = methods[i].getParameterTypes(); 参数类型: params[i].getName();
Field[] fields = c.getFields(); //public Field[] fields = c.getDeclaredFields() //该类所有的成员变量 然后获得该成员变量的类类型,类名字,成员变量的名字, 类类型:Class fieldType = fields[i].getType(); 类名字:String typeName = fieldType.getName(); 变量名字:String fieldName = fields[i].getName
Class c = Class.forName(“完整的类名”); Constructor[] cs = c.getConstructors(); Constructor[] cs = c.getDeclaredConstructors();//获取该类的构造函数 构造函数参数类类型:Class[] paramTypes = cs[i].getParameterTypes(); 构造函数参数类型: paramTypes[i].getName()
先获得method,需要拿到类类型,方法名,方法参数 Class c1 = a.getClass(); Method method = c1.getMethod(“方法名”, 方法参数类型); 最后方法的反射操作 method.invoke(a, 2, 5); 如果没有返回值,返回null, 有返回值,则返回得到的值
java 中的集合泛型只是为了防止错误输入,只在编译阶段有效。 反射的操作都是编译之后的操作。 如果要进行验证,可以绕过编译操作,也就可以绕过了泛型 也就是用泛型的method.invoke()方法。
新闻热点
疑难解答