문제

가능한 복제 :
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를 사용하여 입력 할 필요가 없습니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top