Все, что я пытаюсь сделать, это получить текущее имя класса, а java добавляет бесполезный бессмысленный $ 1 в конец имени моего класса. Как я могу избавиться от него и вернуть только фактическое имя класса?
String className = this.getClass().getName();
String className = getClass().getName().substring(0, getClass().getName().indexOf("$"))
$1
тогда, потому что имя класса$1
. Если вы ожидаете чего-то другого, используйтеthis
правильный класс вместо неправильного.Ответы:
«$ 1» не является «бесполезным бессмысленным». Если ваш класс анонимный, добавляется номер.
Если вам нужен не сам класс, а его класс, то вы можете его использовать
getEnclosingClass()
. Например:Вы можете переместить это в некоторый статический служебный метод.
Но обратите внимание, что это не текущее имя класса. Анонимный класс - это другой класс, чем класс, в который он включен. Случай аналогичен для внутренних классов.
источник
null
, и использовать последний некласс, которыйnull
вы получили?Пытаться,
Это будет работать до тех пор, пока вы не используете его в статическом методе.
источник
""
Попробуйте использовать это
this.getClass().getCanonicalName()
илиthis.getClass().getSimpleName()
. Если это анонимный класс, используйтеthis.getClass().getSuperclass().getName()
источник
Вы можете использовать
this.getClass().getSimpleName()
, например, так:источник
Сочетание обоих ответов. Также печатает имя метода:
источник
этот ответ запоздал, но я думаю, что есть другой способ сделать это в контексте класса анонимного обработчика.
скажем так:
он достигнет того же результата. кроме того, это на самом деле довольно удобно, поскольку каждый класс определяется во время компиляции, поэтому динамичность не нарушается.
Кроме того, если класс действительно является вложенным, т. е.
A
фактически окруженB
, класс B может быть легко известен как:источник
В вашем примере,
this
вероятно, относится к экземпляру анонимного класса. Java дает имя этим классам, добавляя a$number
к имени включающего класса.источник
Я предполагаю, что это происходит для анонимного класса. Когда вы создаете анонимный класс, вы фактически создаете класс, который расширяет класс, имя которого вы получили.
«Чистый» способ получить желаемое имя:
Если ваш класс является анонимным внутренним классом,
getSuperClass()
вам следует указать класс, из которого он был создан. Если вы создали его из интерфейса, чем-то вроде SOL, потому что лучшее, что вы можете сделать, этоgetInterfaces()
предоставить вам более одного интерфейса.«Хакерский» способ - просто получить имя
getClassName()
и использовать регулярное выражение для удаления$1
.источник
Вот вариант Android, но тот же принцип можно использовать и в простой Java.
источник
Я обнаружил, что это работает для моего кода, однако мой код получает класс из массива в цикле for.
источник
API отражения
источник