Rumah > Soal Jawab > teks badan
在反射方法的时候,如果某方法没有参数
好像有下面两种方法去获得
getMethod(method_name_str, new Class[]{});
或者
getMethod(method_name_str, null);
请问这两种方法有区别吗?
高洛峰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).
大家讲道理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;
}