recherche

Maison  >  Questions et réponses  >  le corps du texte

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

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

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

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

天蓬老师天蓬老师2804 Il y a quelques jours998

répondre à tous(2)je répondrai

  • 高洛峰

    高洛峰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).

    répondre
    0
  • 大家讲道理

    大家讲道理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;
    }

    répondre
    0
  • Annulerrépondre