Java에서 클래스에 대한 메서드가 있는지 확인하는 방법은 무엇입니까? try {...} catch {...}
성명을 잘 수행 할 수 있습니까?Java에서 런타임에 메소드가 존재하는지 확인하는 방법은 무엇입니까?
답변
난 당신이 방법 doSomething(String, Object)
을 확인하려는 경우를 가정 해 보겠습니다.
이 작업을 시도 할 수 있습니다 : 메소드가 컴파일 시간에 해결 될 때문에이 작동하지 않습니다
boolean methodExists = false;
try {
obj.doSomething("", null);
methodExists = true;
} catch (NoSuchMethodError e) {
// ignore
}
.
정말 반사를 사용해야합니다. 호출하려는 메서드의 소스 코드에 액세스 할 수있는 경우 호출 할 메서드로 인터페이스를 만드는 것이 좋습니다.
[업데이트] 추가 정보는 다음과 같습니다. 이전 버전 (원하는 방법 없음)과 새 버전 (원하는 방법 사용)의 두 가지 버전으로 존재할 수있는 인터페이스가 있습니다. 그 바탕으로, 나는 다음과 같은 제안 : 방법 getAllowedNether
인터페이스에 존재하는지 여부를
package so7058621;
import java.lang.reflect.Method;
public class NetherHelper {
private static final Method getAllowedNether;
static {
Method m = null;
try {
m = World.class.getMethod("getAllowedNether");
} catch (Exception e) {
// doesn't matter
}
getAllowedNether = m;
}
/* Call this method instead from your code. */
public static boolean getAllowedNether(World world) {
if (getAllowedNether != null) {
try {
return ((Boolean) getAllowedNether.invoke(world)).booleanValue();
} catch (Exception e) {
// doesn't matter
}
}
return false;
}
interface World {
//boolean getAllowedNether();
}
public static void main(String[] args) {
System.out.println(getAllowedNether(new World() {
public boolean getAllowedNether() {
return true;
}
}));
}
}
이 코드 테스트, 그래서 실제 객체가 방법이 있는지 여부는 문제가되지 않습니다.
getAllowedNether
메서드를 매우 자주 호출해야하고 성능상의 문제가 발생하는 경우보다 진보 된 대답을 생각해 봐야합니다. 이건 지금은 괜찮을거야.
자바에서는 이것을 반사라고합니다. API를 사용하면 런타임에 메서드를 찾고 호출 할 수 있습니다. 다음은 문서에 대한 포인터입니다. 그것은 꽤 자세한 구문입니다하지만 해낼 수 있습니다 :
http://java.sun.com/developer/technicalArticles/ALT/Reflection/
링크가 더 이상 작동하지 않습니다. – mikiqex
Class.getMethod(...)
기능을 사용할 때 반사 API가 NoSuchMethodException
을 던졌습니다. ! 경우 (널 (null) =는 getDeclaredMethod (:
그렇지 않으면 오라클은 반사에 대한 좋은 자습서를 http://download.oracle.com/javase/tutorial/reflect/index.html
예있다 obj, "getId", null)) 물건을하세요 ...
private Method getDeclaredMethod(Object obj, String name, Class<?>... parameterTypes) {
// TODO Auto-generated method stub
try {
return obj.getClass().getDeclaredMethod(name, parameterTypes);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
- 1. 오라클에 테이블이 존재하는지 확인하는 방법은 무엇입니까?
- 2. Gsp에 개체가 존재하는지 여부를 확인하는 방법은 무엇입니까?
- 3. jQuery를 사용하여 ID가 존재하는지 확인하는 방법은 무엇입니까?
- 4. BROWSABLE 활동이 존재하는지 (설치되었는지) 확인하는 방법은 무엇입니까?
- 5. java에서 인코딩을 확인하는 방법은 무엇입니까?
- 6. PHP에서 메소드가 정적인지 확인하는 방법은 무엇입니까?
- 7. EnableViewStateMac이 런타임에 설정되었는지 확인하는 방법은 무엇입니까?
- 8. Java에서 X 초가 경과했는지 확인하는 방법은 무엇입니까?
- 9. Java에서 SMTP 서버의 상태를 확인하는 방법은 무엇입니까?
- 10. JAVA에서 파일의 사용 여부를 확인하는 방법은 무엇입니까?
- 11. 테이블의 속성이 존재하는지 여부를 확인하는 쿼리는 무엇입니까?
- 12. 데이터베이스에 대한 연결을여십시오. 여전히 존재하는지 확인하는 방법은 무엇입니까?
- 13. 대상을 호출하기 전에 대상이 존재하는지 여부를 확인하는 방법은 무엇입니까?
- 14. 주어진 문자열에 단어 집합이 존재하는지 확인하는 정규식을 만드는 방법은 무엇입니까?
- 15. System.webServer/Security/requestFiltering 섹션이 프로그래밍 방식으로 존재하는지 확인하는 방법은 무엇입니까?
- 16. 헬퍼 메소드/변수가 rspec에 존재하는지 확인하는 방법은 무엇입니까?
- 17. C#을 사용하여 레지스트리 값이 존재하는지 확인하는 방법은 무엇입니까?
- 18. 창 스타일이 16 진수로 존재하는지 확인하는 방법은 무엇입니까?
- 19. mySql에서 특정 값이 기본 키로 존재하는지 확인하는 방법은 무엇입니까?
- 20. Java Eclipse Plugin Development에서 IFile이 실제로 존재하는지 확인하는 방법은 무엇입니까?
- 21. 메소드가 Java에서 콜렉션 <Foo>을 리턴하는지 확인하는 방법은 무엇입니까?
- 22. XSLT에 값이 존재하는지 확인하는 방법
- 23. 메소드가 Policy Injection의 속성인지 확인하는 가장 좋은 방법은 무엇입니까?
- 24. 런타임에 예외가 발생하여 프로그램이 실행 중인지 확인하는 방법은 무엇입니까?
- 25. 런타임에 Maven POM을 편집하는 방법은 무엇입니까?
- 26. java에서 클러스터를 선언하는 방법은 무엇입니까?
- 27. 런타임에 Java에서 Groovy 코드 실행
- 28. 현지화가 있는지 확인하는 방법은 무엇입니까?
- 29. iMacro를 사용하여 필드가 존재하는지 확인하는 방법
- 30. 필드가 ORACLE 테이블에 존재하는지 확인하는 빠른 방법
리플렉션을 사용하고 있습니까? 그렇지 않으면, 당신이 무엇을 요구하고 있는지 잘 모르겠습니다 ... – Neil
try/catch가 메소드 존재와 관련이 있습니까? 'remove '의 구현이'UnsupportedOperationException'을 던질 수있는'Iterator' 인터페이스와 같은 상황을 언급하지 않는다면? –
기존 방법에 대해 어떤 종류의 검사를하고 있습니까? 반사? – Jaka