Дополнительно
Java - получить имя текущего класса?
Все, что я пытаюсь сделать, это получить текущее имя класса, а java добавляет бесполезную бессмыслицу $1 в конец имени класса. Как я могу избавиться от этого и вернуть только фактическое имя класса?
String className = this.getClass().getName();
258
10
"$1" не является "бесполезной бессмыслицей". Если ваш класс анонимный, к нему добавляется число.
Если вам нужен не сам класс, а его декларирующий класс, то вы можете использовать
getEnclosingClass()
. Например:Вы можете переместить это в какой-нибудь статический метод утилиты.
Но обратите внимание, что это не текущее имя класса. Анонимный класс - это другой класс, чем его объемлющий класс. Аналогично обстоит дело и с внутренними классами.
Попробуйте
Это будет работать так долго, как вы Дон'т использовать его в статический метод.
Попробуйте использовать следующее
this.getClass().getCanonicalName()
илиthis.getClass().getSimpleName()
. Если это анонимный класс, используйтеthis.getClass().getSuperclass().getName()
.Вы можете использовать это.getClass().getSimpleName (), например так:
Сочетание обоих ответов. Также печатает имя метода:
этот ответ поздно, но я думаю, что есть другой способ сделать это в контексте анонимного класса обработчика.
позвольте'ы сказать:
это позволит достичь того же результата. кроме того, он'ов на самом деле очень удобно так как каждый класс определяется во время компиляции, так что нет динамичность поврежден.
кроме того, если класс действительно вложенными, т. е.
А
на самом деле заключена на уровне "B", класса B могут быть легко известны как:В вашем примере
this
, вероятно, относится к анонимному экземпляру класса. Java дает имя таким классам, добавляя$number
к имени окружающего класса.Я'м предполагая, что это происходит для анонимного класса. Когда вы создаете анонимный класс, который вы на самом деле создать класс, который расширяет класс, имя которого вы получили.
В "чистых" и способ, чтобы получить имя, которое вы хотите:
Если ваш класс-это анонимный внутренний класс,
getSuperClass () должны дать вам класс, что он был создан из. Если вы создали его из интерфейса, чем вы'вэ-то вроде Sol, потому что лучшее, что вы можете сделать, это
getInterfaces ()`, который может дать вам более чем один интерфейс.В "богатство" и способ, чтобы просто получить имя С
то getclassname () и использовать регулярное выражение, чтобы удалить
$1`.Отражение Апис
Я'вэ нашел это работать на мой код, но мой код становится класса из массива в цикле for.
в