實際編程中如果我們要使用系統中未暴露的方法,我們可以通過反射來使用這些方法,但在使用過程中我們很難確定方法對用的參數類型,以下的代碼可以幫你得到這些信息:
package cn.sunzn.reflectcase; import java.lang.reflect.Method; public class GetMethod { public static void main(String[] args) { getMethodInfo("java.util.HashSet"); } /** * 傳入全類名獲得對應類中所有方法名和參數名 */ @SuppressWarnings("rawtypes") private static void getMethodInfo(String pkgName) { try { Class clazz = Class.forName(pkgName); Method[] methods = clazz.getMethods(); for (Method method : methods) { String methodName = method.getName(); System.out.println("方法名稱:" + methodName); Class<?>[] parameterTypes = method.getParameterTypes(); for (Class<?> clas : parameterTypes) { String parameterName = clas.getName(); System.out.println("參數名稱:" + parameterName); } System.out.println("*****************************"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
傳入 java.util.HashSet 的運行結果如下:
方法名稱:add 參數名稱:java.lang.Object ***************************** 方法名稱:clone ***************************** 方法名稱:clear ***************************** 方法名稱:iterator ***************************** 方法名稱:remove 參數名稱:java.lang.Object ***************************** 方法名稱:contains 參數名稱:java.lang.Object ***************************** 方法名稱:isEmpty ***************************** 方法名稱:size ***************************** 方法名稱:equals 參數名稱:java.lang.Object ***************************** 方法名稱:hashCode ***************************** 方法名稱:removeAll 參數名稱:java.util.Collection ***************************** 方法名稱:toString ***************************** 方法名稱:addAll 參數名稱:java.util.Collection ***************************** 方法名稱:containsAll 參數名稱:java.util.Collection ***************************** 方法名稱:retainAll 參數名稱:java.util.Collection ***************************** 方法名稱:toArray 參數名稱:[Ljava.lang.Object; ***************************** 方法名稱:toArray ***************************** 方法名稱:wait ***************************** 方法名稱:wait 參數名稱:long 參數名稱:int ***************************** 方法名稱:wait 參數名稱:long ***************************** 方法名稱:getClass ***************************** 方法名稱:notify ***************************** 方法名稱:notifyAll *****************************
