Можно ли получить имя класса из статического метода?[дубликат]

StackOverflow https://stackoverflow.com/questions/1067344

  •  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, которая поможет вам, чтобы вам не приходилось печатать так много :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top