2013-06-10 3 views
-2

부모 클래스의 서브 클래스가 아니라 내 서브 클래스에서 오버라이드 된 메소드 만 가져와야합니다. 예를 들어리플렉션을 사용하여 오버라이드 된 메소드 가져 오기

는 :

class Foo { 
    public void doStuff(){ 

    } 

    public void doStuff2(){ 

    } 
} 

class Bar extends Foo{ 
    public void doStuff(){ 

    } 
    public void subDoStuff(){ 

    } 
} 

난 반사는 doStuff()subDoStuff() 보여주고 싶다. 현재 코드를 사용 중입니다.

for (Method m : mClass.getDeclaredMethods()) { 
       m.getName(); 
     } 

그러나 모든 방법이 나열되어 있습니다.

해결! 코드가 정확합니다. 방금 나는 버팀대, 바보 같은 버그를 잊었다.

if (m.getName().equals("onBackPressed")) {//<- 
      System.out.println("ethod: " + m.getName()); 
      return true; 
      }//<---- 
+0

* "나는 내 서브 클래스에서 오버라이드 (override) 만 방법을 얻을 필요"시도해야한다? –

+1

'getDeclaredMethods'의 Javadoc에 따르면 :'public, protected, default (패키지) 접근과 private 메소드를 포함하지만 상속 된 메소드는 제외합니다. ' 그래서이'getDeclaredMethods'에 따르면 상속 된 메소드를 반환하지 않습니다. 당신이 얻고 있다고 생각하지 않는 방법은 무엇입니까? –

+0

예, 이유가 무엇입니까? 또한 시간을내어 java.lang.Class의 javadoc을 읽으십시오. # getDeclaredMethods() – dkateros

답변

0

당신은 왜 *

class.getMethod("myMethod").getDeclaringClass(); 
+0

이것은 subDoStuff에서 작동하지만 doStuff의 선언 클래스는 Foo입니다. – WilQu

관련 문제