Можно ли получить имя класса из статического метода?[дубликат]
-
21-08-2019 - |
Вопрос
Возможный дубликат:
Получение имени класса из статического метода в Java
Когда вы находитесь внутри статического метода, есть ли способ получить имя класса (строку, содержащую имя), не вводя само имя класса?
Например, набрав MyClass.class.getName()
не более полезно, чем просто "Myclass"
.
Решение
Вы можете сделать это, создав (не выбрасывая) новое исключение и проверив его трассировку стека.Ваш класс будет нулевым элементом, поскольку он является источником исключения.Это немного неправильно, но это сработает.
System.out.println( new Exception().getStackTrace()[0].getClassName() );
Вы можете сделать то же самое с классом Thread.Мне это кажется чище, но линия немного длиннее.Ваш класс теперь является первым элементом в трассировке стека, а не нулевым.Thread.getStackTrace() — нулевой.
System.out.println( Thread.currentThread().getStackTrace()[1].getClassName() );
Например, ввод MyClass.class.getName() не более полезен, чем просто «Myclass».
Напротив, если вы переименуете MyClass с помощью функции рефакторинга вашей IDE, он заменит 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, которая поможет вам, чтобы вам не приходилось печатать так много :)