在反射方法的时候,如果某方法没有参数好像有下面两种方法去获得
getMethod(method_name_str, new Class[]{});或者getMethod(method_name_str, null);
请问这两种方法有区别吗?
欢迎选择我的课程,让我们一起见证您的进步~~
効果の点では、Class クラスの getMethod メソッドの場合、これら 2 つのパラメーターに違いはありません。 getMethod のソース コードを表示できます。getMethod がレイヤーごとに呼び出された後、次のメソッドが使用されます。Class 类的 getMethod 方法,这两种参数没有区别。我们可以查看 getMethod 的源码,getMethod 层层调用之后,会使用下面的方法:
Class
getMethod
这个方法中,可以看到有一个 arrayContentsEq 方法用来匹配方法的参数:
arrayContentsEq
可以发现,对于 parameterTypes 为 null 的情况,和对于 parameterTypes 为空数组(length == 0)的情况,效果是一样的 —— 假设此时我们要获取的方法 m 的参数为空,那么该方法的 m.getParameterTypes() 返回的数组(a2)的长度即为 0,我们可以发现 a1 == null 或者 a1.length == 0 的时候,arrayContentsEq 方法返回的都是 true
null
m.getParameterTypes()
a1 == null
a1.length == 0
true
メソッドにパラメーターがない場合、実際には 2 つの状況に違いはありません。
追跡getMethod(String name, Class<?>... parameterTypes)的源码,可以发现如下代码,其中a1为传入的parameterTypes,a2为根据参数name找到的Method实例调用的method.getParameterTypes()。程序根据比较a1和a2来返回正确的Method。
getMethod(String name, Class<?>... parameterTypes)
parameterTypes
a2
name
Method
method.getParameterTypes()
a1
効果の点では、
Class
クラスのgetMethod
メソッドの場合、これら 2 つのパラメーターに違いはありません。getMethod
のソース コードを表示できます。getMethod
がレイヤーごとに呼び出された後、次のメソッドが使用されます。Class
类的getMethod
方法,这两种参数没有区别。我们可以查看
getMethod
的源码,getMethod
层层调用之后,会使用下面的方法:这个方法中,可以看到有一个
arrayContentsEq
方法用来匹配方法的参数:可以发现,对于 parameterTypes 为
このメソッドでは、メソッドのパラメータを照合するために使用されるnull
的情况,和对于 parameterTypes 为空数组(length == 0)的情况,效果是一样的 —— 假设此时我们要获取的方法 m 的参数为空,那么该方法的m.getParameterTypes()
返回的数组(a2)的长度即为 0,我们可以发现a1 == null
或者a1.length == 0
的时候,arrayContentsEq
方法返回的都是true
arrayContentsEq
メソッドがあることがわかります:🎜 🎜parameterTypes が
null
の場合と parameterTypes が空の配列 (長さ == 0) の場合、効果は同じであることがわかります。 — 今回取得したいメソッド m のパラメータが空であるとすると、メソッドのm.getParameterTypes()
によって返される配列 (a2) の長さは 0 となり、次のようになります。a1 == null
またはa1.length == 0
の場合、arrayContentsEq
メソッドはtrue
を返します (つまりつまり、マッチング成功です)。 🎜メソッドにパラメーターがない場合、実際には 2 つの状況に違いはありません。
追跡
リーリーgetMethod(String name, Class<?>... parameterTypes)
的源码,可以发现如下代码,其中a1为传入的parameterTypes
,a2
为根据参数name
找到的Method
实例调用的method.getParameterTypes()
。程序根据比较a1
和a2
来返回正确的Method
。