在反射方法的时候,如果某方法没有参数
好像有下面两种方法去获得
getMethod(method_name_str, new Class[]{});
或者
getMethod(method_name_str, null);
请问这两种方法有区别吗?
高洛峰2017-04-18 10:50:53
효과적인 측면에서 Class
클래스의 getMethod
메소드의 경우 이 두 매개변수 사이에는 차이가 없습니다. getMethod
의 소스 코드를 볼 수 있습니다. getMethod
을 레이어별로 호출한 후 다음 방법을 사용합니다.
이 메소드에는 메소드의 매개변수를 일치시키는 데 사용되는 arrayContentsEq
메소드가 있음을 확인할 수 있습니다.
parameterTypes가 null
인 경우와 parameterTypes가 빈 배열(길이 == 0)인 경우의 효과는 다음과 같습니다. same - 이것을 가정합니다. 우리가 얻으려는 메소드 m의 매개변수가 비어 있으면 메소드의 m.getParameterTypes()
에서 반환되는 배열(a2)의 길이는 0입니다. a1 == null
또는 a1.length == 0
일 때 이를 찾을 수 있습니다. arrayContentsEq
메서드는 All are true
을 반환합니다(즉, 일치가 성공함).
大家讲道理2017-04-18 10:50:53
메서드에 매개변수가 없으면 실제로 두 상황 사이에 차이가 없습니다.
getMethod(String name, Class<?>... parameterTypes)
의 소스 코드를 추적하면 다음 코드를 찾을 수 있습니다. 여기서 a1은 들어오는 parameterTypes
이고 a2
는 name
매개변수에 따라 발견된 Method
인스턴스가 호출하는 method.getParameterTypes()
입니다. 🎜>. 프로그램은 a1
과 a2
의 비교를 바탕으로 올바른 Method
을 반환합니다.