利用java反射調用類及父類的的私人方法
來源:互聯網
上載者:User
今天和一位朋友談到父類私人方法的調用問題,本來以為利用反射很輕鬆就可以實現,因為在反射看來根本不區分是否是private的,沒有想到調用本身的私人方法是可以的,但是調用父類的私人方法則不行,後來糾其原因很有可能是因為getDeclaredMethod方法和getMethod方法並不會尋找父類的私人方法,於是只好自己寫遞迴了,經過嘗試果然如此。把代碼放出來方便更多人。這段代碼可以解決很多實際問題,不過利用反射來做的話效能不會太好。
[java] view plain copy package com.syj.util.reflect; import java.lang.reflect.Method; /** * <p> * Title: 私人方法調用工具類 * </p> * * <p> * Description:利用java反射調用類的的私人方法 * </p> * * <p> * Copyright: Copyright (c) 2007 * </p> * * @author 孫鈺佳 * @main sunyujia@yahoo.cn * @date Jun 1, 2008 10:18:58 PM */ public class PrivateUtil { /** * 利用遞迴找一個類的指定方法,如果找不到,去父親裡面找直到最上層Object對象為止。 * * @param clazz * 目標類 * @param methodName * 方法名 * @param classes * 方法參數類型數組 * @return 方法對象 * @throws Exception */ public static Method getMethod(Class clazz, String methodName, final Class[] classes) throws Exception { Method method = null; try { method = clazz.getDeclaredMethod(methodName, classes); } catch (NoSuchMethodException e) { try { method = clazz.getMethod(methodName, classes); } catch (NoSuchMethodException ex) { if (clazz.getSuperclass() == null) { return method; } else { method = getMethod(clazz.getSuperclass(), methodName, classes); } } } return method; } /** * * @param obj * 調整方法的對象 * @param methodName * 方法名 * @param classes