java - getMethod 的第二个参数是null和new Class[]{}的区别?
天蓬老师
天蓬老师 2017-04-18 10:48:53
0
2
985

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

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

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(2)
小葫芦

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).

大家讲道理

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;
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal