Maison > Questions et réponses > le corps du texte
在反射方法的时候,如果某方法没有参数
好像有下面两种方法去获得
getMethod(method_name_str, new Class[]{});
或者
getMethod(method_name_str, null);
请问这两种方法有区别吗?
高洛峰2017-04-18 10:50:53
En terme d'effet, pour la méthode Class
de la classe getMethod
, il n'y a pas de différence entre ces deux paramètres.
Nous pouvons visualiser le code source de getMethod
Après que getMethod
soit appelé couche par couche, la méthode suivante sera utilisée :
Dans cette méthode, vous pouvez voir qu'il existe une méthode arrayContentsEq
utilisée pour faire correspondre les paramètres de la méthode :
On peut constater que pour le cas où parameterTypes est null
et pour le cas où parameterTypes est un tableau vide (longueur == 0), l'effet est le idem - Supposons ceci Lorsque le paramètre de la méthode m que nous voulons obtenir est vide, alors la longueur du tableau (a2) renvoyé par m.getParameterTypes()
de la méthode est 0. Nous pouvons constater que lorsque a1 == null
ou a1.length == 0
, la méthode arrayContentsEq
renvoie Tous sont true
(c'est-à-dire que la correspondance est réussie).
大家讲道理2017-04-18 10:50:53
Si une méthode n’a pas de paramètres, il n’y a en réalité aucune différence entre les deux situations.
En traçant le code source de getMethod(String name, Class<?>... parameterTypes)
, vous pouvez trouver le code suivant, où a1 est le parameterTypes
entrant, et a2
est le name
appelé par l'instance Method
trouvée selon le paramètre method.getParameterTypes()
. Le programme renvoie le a1
correct en fonction de la comparaison de a2
et Method
.
private static boolean arrayContentsEq(Object[] a1, Object[] a2) {
if (a1 == null) {
return a2 == null || a2.length == 0;
}
if (a2 == null) {
return a1.length == 0;
}
if (a1.length != a2.length) {
return false;
}
for (int i = 0; i < a1.length; i++) {
if (a1[i] != a2[i]) {
return false;
}
}
return true;
}