ホームページ  >  に質問  >  本文

java - getMethod 的第二个参数是null和new Class[]{}的区别?

在反射方法的时候,如果某方法没有参数
好像有下面两种方法去获得

getMethod(method_name_str, new Class[]{});
或者
getMethod(method_name_str, null);

请问这两种方法有区别吗?

天蓬老师天蓬老师2744日前956

全員に返信(2)返信します

  • 高洛峰

    高洛峰2017-04-18 10:50:53

    効果の点では、Class クラスの getMethod メソッドの場合、これら 2 つのパラメーターに違いはありません。
    getMethod のソース コードを表示できます。getMethod がレイヤーごとに呼び出された後、次のメソッドが使用されます。
    < img src="http://img.php.cn/upload/image/000/000/000/73327164e33aea6aed92d5d169420422-0.png">Class 类的 getMethod 方法,这两种参数没有区别。
    我们可以查看 getMethod 的源码,getMethod 层层调用之后,会使用下面的方法:

    这个方法中,可以看到有一个 arrayContentsEq 方法用来匹配方法的参数:

    可以发现,对于 parameterTypesnull 的情况,和对于 parameterTypes 为空数组(length == 0)的情况,效果是一样的 —— 假设此时我们要获取的方法 m 的参数为空,那么该方法的 m.getParameterTypes() 返回的数组(a2)的长度即为 0,我们可以发现 a1 == null 或者 a1.length == 0 的时候,arrayContentsEq 方法返回的都是 true

    このメソッドでは、メソッドのパラメータを照合するために使用される arrayContentsEq メソッドがあることがわかります:
    🎜 🎜parameterTypesnull の場合と parameterTypes が空の配列 (長さ == 0) の場合、効果は同じであることがわかります。 — 今回取得したいメソッド m のパラメータが空であるとすると、メソッドの m.getParameterTypes() によって返される配列 (a2) の長さは 0 となり、次のようになります。 a1 == null または a1.length == 0 の場合、arrayContentsEq メソッドは true を返します (つまりつまり、マッチング成功です)。 🎜

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:50:53

    メソッドにパラメーターがない場合、実際には 2 つの状況に違いはありません。

    追跡getMethod(String name, Class<?>... parameterTypes)的源码,可以发现如下代码,其中a1为传入的parameterTypesa2为根据参数name找到的Method实例调用的method.getParameterTypes()。程序根据比较a1a2来返回正确的Method

    リーリー

    返事
    0
  • キャンセル返事