가능한 중복 :
Getting the class name from a static method in Java정적 메서드에서 클래스 이름을 가져올 수 있습니까?
정적 방법의 내부에, 클래스 이름을 입력하지 않고 클래스 이름 (이름을 포함하는 문자열)을 얻을 수있는 방법이있다 그 자체?
예를 들어, MyClass.class.getName()
을 입력하면 단지 "Myclass"
보다 유용하지 않습니다.
가능한 중복 :
Getting the class name from a static method in Java정적 메서드에서 클래스 이름을 가져올 수 있습니까?
정적 방법의 내부에, 클래스 이름을 입력하지 않고 클래스 이름 (이름을 포함하는 문자열)을 얻을 수있는 방법이있다 그 자체?
예를 들어, MyClass.class.getName()
을 입력하면 단지 "Myclass"
보다 유용하지 않습니다.
새 예외를 생성하고 (던지지 않음) 스택 추적을 검사하여 수행 할 수 있습니다. 클래스는 Exception의 원점이므로 0 번째 요소가됩니다. 다소 틀린 느낌이지만 작동 할 것입니다.
System.out.println(new Exception().getStackTrace()[0].getClassName());
Thread 클래스에서도 동일한 작업을 수행 할 수 있습니다. 이것은 나에게 깨끗해 보이지만 라인은 약간 더 길다. 이제 클래스가 스택 추적에서 0이 아닌 첫 번째 요소가됩니다. Thread.getStackTrace()는 0입니다.
예를 들어System.out.println(Thread.currentThread().getStackTrace()[1].getClassName());
, MyClass.class.getName를 입력()는 그냥 "MyClass에"보다 더 유용하지 않습니다.
반대로 IDE의 리펙터 기능을 사용하여 MyClass의 이름을 바꾸면 MyClass.class.getName()을 RenamedClass.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를 사용하십시오.
정적 메소드는 선언 된 클래스와 만 연관되어 있습니다. 클래스를 명시 적으로 이름으로 참조하는 것 이외에 클래스에 액세스하는 방법이 있습니다. –