3
나는 클래스를 가지고 있으며 각각 자신의 메서드를 구현하는 여러 하위 클래스가 있습니다. 이러한 하위 클래스 중 일부는 내가 호출해야하는 공통 메소드를 가지고 있습니다. 객체가 메소드를 가지고 있는지를 알 수있는 방법이 있습니까 (instanceof
사용하지 않고)?오브젝트에 특정 메소드가있는 경우 Java 런타임을 체크인하는 방법이 있습니까?
나는 클래스를 가지고 있으며 각각 자신의 메서드를 구현하는 여러 하위 클래스가 있습니다. 이러한 하위 클래스 중 일부는 내가 호출해야하는 공통 메소드를 가지고 있습니다. 객체가 메소드를 가지고 있는지를 알 수있는 방법이 있습니까 (instanceof
사용하지 않고)?오브젝트에 특정 메소드가있는 경우 Java 런타임을 체크인하는 방법이 있습니까?
이 아마 설계 결함을 가리키는하지만, 방법이있는 경우 당신은 항상 확인하는 반사를 사용할 수 있습니다
public static boolean hasMethod(Object obj, String methodName) {
return Arrays.stream(obj.getClass().getMethods())
.anyMatch(m -> m.getName().equals(methodName));
}
이, 물론, 정제 할 수 너무 메소드의 서명을 포함하지만, 기본 아이디어는 동일하게 유지됩니다.
Reflection API를 살펴보십시오. 더 좋은 해결책은 인터페이스에서 멤버쉽을 확인하고 클래스를 반영하는 것이 쉽고 빠르다는 것을 일련의 인터페이스로 정의하는 것일 수 있습니다. – MadProgrammer
리플렉션을 사용하는 대신 메소드를 선언하는 인터페이스를 구현하거나 메서드를 호출합니다. –
리플렉션 없이는 호출 할 수없는 것조차도 가능합니다. http://ideone.com/vy2OP0 – zapl