Rumah  >  Soal Jawab  >  teks badan

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

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

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

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

天蓬老师天蓬老师2744 hari yang lalu952

membalas semua(2)saya akan balas

  • 高洛峰

    高洛峰2017-04-18 10:50:53

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

    balas
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:50:53

    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;
    }

    balas
    0
  • Batalbalas