看了視頻,老師講的很細,寫點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()方法。
新聞熱點
疑難解答