HttpServlet中getAllDeclaredMethods()方法

在看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.//需要复制的长度

很好用的方法..

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT可乐

JAVA 用数组实现 ArrayList

  我们知道 ArrayList 是一个集合,它能存放各种不同类型的数据,而且其容量是自动增长的。那么它是怎么实现的呢?   其实 ArrayList 的底层是...

30280
来自专栏hbbliyong

Python正则进阶

  返回一个列表,如果正则表达式中没有分组,则列表中包含的是所有匹配的内容,如果正则表达式中有分组,则列表中的每个元素是一个元组,元组中包含子分组中匹配到的内容...

14630
来自专栏Android群英传

Swift vs. Kotlin 漫谈系列之类与继承

21340
来自专栏java学习

面试题8(如何获得数组大小)

给出语句“int[]array" 声明,并且初始化该数组,则下面哪个表达式会返回数组的大小。请选择正确的答案。 (a) array[].length() (b)...

34660
来自专栏C++

python笔记:#005#算数运算符

17920
来自专栏彭湖湾的编程世界

【java】java反射初探 ——“当类也学会照镜子”

反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制...

273100
来自专栏转载gongluck的CSDN博客

python笔记:#005#算数运算符

算数运算符 计算机,顾名思义就是负责进行 数学计算 并且 存储计算结果 的电子设备 目标 算术运算符的基本使用 01. 算数运算符 算数运算符是 运算符的一种 ...

39170
来自专栏编程

Python面向对象2:继承、多态特征

面向对象的第二个特征是继承。 可以将多个类共有的方法提取到父类中,子类仅需继承父类; 基本语法为class新类名(父类1,父类2,..) 单继承与多继承区别: ...

19660
来自专栏coding for love

JS常用方法整理-遍历对象

JS中经常需要对对象的属性进行遍历,下面我们来总结一下JS遍历对象属性的几种方法。

16720
来自专栏LanceToBigData

JavaSE(五)JAVA对象向上转型和向下转型

今天做了一个测试的题目,发现自己还是很多问题没有静下心来做。很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了。所以这个要自己应以为鉴!  ...

22460

扫码关注云+社区

领取腾讯云代金券