정적 메소드에서 클래스 이름을 얻을 수 있습니까? [복제하다
-
21-08-2019 - |
문제
가능한 복제 :
Java의 정적 메소드에서 클래스 이름 얻기
정적 메소드 안에있을 때 클래스 이름 자체를 입력하지 않고 클래스 이름 (이름이 포함 된 문자열)을 얻는 방법이 있습니까?
예를 들어, 입력 MyClass.class.getName()
단순한 것보다 더 유용하지 않습니다 "Myclass"
.
해결책
새로운 예외를 생성하고 스택 추적을 검사하여 수행 할 수 있습니다. 당신의 수업은 예외의 기원이므로 Zeroth 요소가 될 것입니다. 그것은 틀린 느낌이지만 효과가있을 것입니다.
System.out.println( new Exception().getStackTrace()[0].getClassName() );
스레드 클래스에서도 똑같이 할 수 있습니다. 이것은 나에게 더 깨끗해 보이지만 선은 약간 길다. 당신의 수업은 이제 Zeroth가 아닌 StackTrace의 첫 번째 요소입니다. Thread.getStacktrace ()는 Zeroth입니다.
System.out.println( Thread.currentThread().getStackTrace()[1].getClassName() );
예를 들어, myclass.class.getName ()을 입력하는 것은 단순히 "myclass"보다 더 유용하지 않습니다.
반대로, IDE의 리팩터 함수를 사용하여 MyClass의 이름을 바꾸면 renamedclass.class.getName ()로 myClass.class.getName ()을 대체합니다. 문자열을 거기에 넣으면 수동으로해야합니다.
다른 팁
익명의 내부 클래스를 사용할 수 있습니다.
class Test {
public static void main(String[] args) {
String className = new Object(){}.getClass().getEnclosingClass().getName();
System.out.println(className);
}
}
그것이 타이핑을 저장하는 문제 일 뿐이라면 그것에 대해 생각하지 마십시오. myclass.class를 사용하면 모든 리팩토링 도구가 코드를 제대로 인식하고 작동 할 수 있습니다.
Java로 프로그램을 선택하면 많은 것을 입력합니다. 도움이되는 IDE를 사용하여 입력 할 필요가 없습니다. :)