在看apache-tomcat-7.0.40中的HttpServlet的时候,看到它里面的方法getAllDeclaredMethods()写的很不错!
1 private static Method[] getAllDeclaredMethods(Class<?> c) { 2 3 if (c.equals(javax.servlet.http.HttpServlet.class)) { 4 return null; 5 } 6 7 Method[] parentMethods = getAllDeclaredMethods(c.getSuperclass()); 8 Method[] thisMethods = c.getDeclaredMethods(); 9 10 if ((parentMethods != null) && (parentMethods.length > 0)) { 11 Method[] allMethods = 12 new Method[parentMethods.length + thisMethods.length]; 13 System.arraycopy(parentMethods, 0, allMethods, 0, 14 parentMethods.length); 15 System.arraycopy(thisMethods, 0, allMethods, parentMethods.length, 16 thisMethods.length); 17 18 thisMethods = allMethods; 19 } 20 21 return thisMethods; 22 }
我想说的有两个地方:
one:if ((parentMethods != null) && (parentMethods.length > 0))
我们在判断一个数组的时候是否为空的时候,应该先判断该数组是否为<code>null</code>,在判断数组的长度...
two:System.arraycopy(parentMethods, 0, allMethods, 0, parentMethods.length);
这里提到的方法是:
1 public static native void arraycopy(Object src, int srcPos, 2 Object dest, int destPos, 3 int length);
这是一个数组复制数组的函数,在 java.lang.System 类中。
参数含义:
1 * @param src the source array. //原数组 2 * @param srcPos starting position in the source array. //原数组的起始位置 3 * @param dest the destination array.//目标数组 4 * @param destPos starting position in the destination data.//目标数组起始位置 5 * @param length the number of array elements to be copied.//需要复制的长度
很好用的方法..