2016-06-09 2 views
3

나는 클래스를 가지고 있으며 각각 자신의 메서드를 구현하는 여러 하위 클래스가 있습니다. 이러한 하위 클래스 중 일부는 내가 호출해야하는 공통 메소드를 가지고 있습니다. 객체가 메소드를 가지고 있는지를 알 수있는 방법이 있습니까 (instanceof 사용하지 않고)?오브젝트에 특정 메소드가있는 경우 Java 런타임을 체크인하는 방법이 있습니까?

+3

Reflection API를 살펴보십시오. 더 좋은 해결책은 인터페이스에서 멤버쉽을 확인하고 클래스를 반영하는 것이 쉽고 빠르다는 것을 일련의 인터페이스로 정의하는 것일 수 있습니다. – MadProgrammer

+4

리플렉션을 사용하는 대신 메소드를 선언하는 인터페이스를 구현하거나 메서드를 호출합니다. –

+0

리플렉션 없이는 호출 할 수없는 것조차도 가능합니다. http://ideone.com/vy2OP0 – zapl

답변

9

이 아마 설계 결함을 가리키는하지만, 방법이있는 경우 당신은 항상 확인하는 반사를 사용할 수 있습니다

public static boolean hasMethod(Object obj, String methodName) { 
    return Arrays.stream(obj.getClass().getMethods()) 
       .anyMatch(m -> m.getName().equals(methodName)); 
} 

이, 물론, 정제 할 수 너무 메소드의 서명을 포함하지만, 기본 아이디어는 동일하게 유지됩니다.

관련 문제