반응형
리플렉션을 사용하여 메서드가 정적인지 어떻게 확인할 수 있습니까?
런타임에 클래스의 정적 메서드 만 찾고 싶습니다. 어떻게해야합니까? 또는 정적 및 비 정적 방법을 구별하는 방법.
사용 Modifier.isStatic(method.getModifiers())
.
/**
* Returns the public static methods of a class or interface,
* including those declared in super classes and interfaces.
*/
public static List<Method> getStaticMethods(Class<?> clazz) {
List<Method> methods = new ArrayList<Method>();
for (Method method : clazz.getMethods()) {
if (Modifier.isStatic(method.getModifiers())) {
methods.add(method);
}
}
return Collections.unmodifiableList(methods);
}
참고 :이 방법은 실제로 보안 관점에서 위험합니다. Class.getMethods "bypass [es] SecurityManager는 즉각적인 호출자의 클래스 로더에 따라 검사합니다"(Java 보안 코딩 지침의 섹션 6 참조).
면책 조항 : 테스트 또는 컴파일되지 않았습니다.
주의해서 Modifier
사용해야합니다. int로 표시된 플래그는 형식에 안전하지 않습니다. 일반적인 실수는 적용되지 않는 반사 오브젝트 유형에서 수정 자 플래그를 테스트하는 것입니다. 같은 위치에있는 플래그가 다른 정보를 나타내도록 설정된 경우 일 수 있습니다.
다음과 같은 정적 메서드를 얻을 수 있습니다.
for (Method m : MyClass.class.getMethods()) {
if (Modifier.isStatic(m.getModifiers()))
System.out.println("Static Method: " + m.getName());
}
이전 (올바른) 답변을 구체화하기 위해 다음은 원하는 작업을 수행하는 전체 코드 스 니펫입니다 (예외 무시 됨).
public Method[] getStatics(Class<?> c) {
Method[] all = c.getDeclaredMethods()
List<Method> back = new ArrayList<Method>();
for (Method m : all) {
if (Modifier.isStatic(m.getModifiers())) {
back.add(m);
}
}
return back.toArray(new Method[back.size()]);
}
참고 URL : https://stackoverflow.com/questions/287645/how-can-i-check-if-a-method-is-static-using-reflection
반응형
'programing' 카테고리의 다른 글
PropertyInfo를 사용하여 속성 유형 찾기 (0) | 2020.08.16 |
---|---|
추상 메서드없이 추상 클래스 정의 (0) | 2020.08.16 |
WSDL 대 REST 장단점 (0) | 2020.08.16 |
PHP가 0을 문자열과 같은 것으로 간주하는 이유는 무엇입니까? (0) | 2020.08.16 |
Visual Studio 2013에서 솔루션 파일 (SLN)을 강제로 열려면 어떻게해야합니까? (0) | 2020.08.16 |