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;
}
Dari segi kesan, untuk kaedah
.Class
kelasgetMethod
, tiada perbezaan antara kedua-dua parameter ini.Kita boleh melihat kod sumber
getMethod
SelepasgetMethod
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 kaedahm.getParameterTypes()
ialah 0. Kita boleh mendapati bahawa apabilaa1 == null
ataua1.length == 0
, kaedaharrayContentsEq
mengembalikan Semua adalahtrue
(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 ialahparameterTypes
masuk dana2
ialahname
yang dipanggil oleh contohMethod
yang ditemui mengikut parametermethod.getParameterTypes()
. Program ini mengembalikana1
yang betul berdasarkan perbandingana2
danMethod
.