2011-07-26 3 views
2

스 니펫을 사용하려고합니다.메소드가 getDeclaredMethods()에 나타나지만 getDeclaredMethod()에서 찾을 수없는 이유는 무엇입니까?

GenericModel.class.getDeclaredMethod("findById"); 

"findById"라는 메서드를 얻으려고합니다. 나는 전화 할 때 메서드가 존재하는 것을 알고 있기 때문에 :

GenericModel.class.getDeclaredMethods(); 

메서드가 반환 된 배열에 나열됩니다.

그러나 첫 번째 스 니펫을 사용할 때 java.lang.NoSuchMethodException이 발생합니까? 왜?

+0

필자는 철자법 실수를 피하기 위해 메서드의 이름을 복사하여 붙여 넣기를 시도했지만 아무 소용이 없습니다. –

+0

GenericModel.class.getDeclaredMethod ("findAll") 또는 클래스의 다른 메소드를 호출하면 성공한 것입니까? –

답변

4

아마도 findById은 실제로 매개 변수를 사용합니다. 그러나 그 이름으로 아무 것도 취하지 않는 방법을 찾고 있습니다. 대부분의 경우 당신이 원하는 무엇인가 : findById는 인수를 이름으로 판단

Object findById(int id) { ... } 
+0

메서드 메서드 = field.getType(). getDeclaredMethod ("findById", 새 클래스 [] {Object.class}); –

2

getDeclaredMethod()도 매개 변수 유형을 받고, 아무 것도주지 않았으며 findViewById의 경우 매개 변수로 int을받는 방법입니다.

2

:

GenericModel.class.getDeclaredMethod("findById", new Class[] { int.class }); 

이이 같은 서명이 방법을 일치합니다. findById의 인수를 getDeclaredMethod에 대한 호출을위한 추가 매개 변수로 지정해야하므로 어떤 메소드를 제공 할 것인지 알 수 있으므로 10 개의 다른 findById가있을 수 있습니다.

관련 문제