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

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

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

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

天蓬老师
天蓬老师

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

membalas semua(2)
小葫芦

Dari segi kesan, untuk kaedah Class kelas getMethod, tiada perbezaan antara kedua-dua parameter ini.
Kita boleh melihat kod sumber getMethod Selepas getMethod dipanggil lapisan demi lapisan, kaedah berikut akan digunakan:

.

Dalam kaedah ini, anda dapat melihat bahawa terdapat arrayContentsEq kaedah yang digunakan untuk memadankan parameter kaedah:

Boleh didapati bahawa untuk kes di mana parameterTypes ialah null dan untuk kes di mana parameterTypes ialah tatasusunan kosong (panjang == 0), kesannya ialah sama - Anggap ini Apabila parameter kaedah m yang ingin kita perolehi kosong, maka panjang tatasusunan (a2) yang dikembalikan oleh kaedah m.getParameterTypes() ialah 0. Kita boleh mendapati bahawa apabila a1 == null atau a1.length == 0, kaedah arrayContentsEq mengembalikan Semua adalah true (iaitu perlawanan berjaya).

大家讲道理

Jika kaedah tidak mempunyai parameter, sebenarnya tiada perbezaan antara kedua-dua situasi.

Mengesan kod sumber getMethod(String name, Class<?>... parameterTypes), anda boleh menemui kod berikut, dengan a1 ialah parameterTypes masuk dan a2 ialah name yang dipanggil oleh contoh Method yang ditemui mengikut parameter method.getParameterTypes(). Program ini mengembalikan a1 yang betul berdasarkan perbandingan a2 dan 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;
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan