getName () - возвращает имя объекта (класса, интерфейса, класса массива, примитивного типа или void), представленного этим объектом Class, в виде String.
getCanonicalName () - возвращает каноническое имя базового класса, как определено в Спецификации языка Java.
getSimpleName () - возвращает простое имя базового класса, то есть имя, данное ему в исходном коде.
package com.practice;
public class ClassName {
public static void main(String[] args) {
ClassName c = new ClassName();
Class cls = c.getClass();
// returns the canonical name of the underlying class if it exists
System.out.println("Class = " + cls.getCanonicalName()); //Class = com.practice.ClassName
System.out.println("Class = " + cls.getName()); //Class = com.practice.ClassName
System.out.println("Class = " + cls.getSimpleName()); //Class = ClassName
System.out.println("Class = " + Map.Entry.class.getName()); // -> Class = java.util.Map$Entry
System.out.println("Class = " + Map.Entry.class.getCanonicalName()); // -> Class = java.util.Map.Entry
System.out.println("Class = " + Map.Entry.class.getSimpleName()); // -> Class = Entry
}
}
Одно отличие состоит в том, что если вы используете анонимный класс , вы можете получить нулевое значение при попытке получить имя класса с помощью getCanonicalName()
Другой факт заключается в том, что метод getName()
ведет себя иначе, чем метод getCanonicalName()
для внутренних классов . getName()
использует доллар в качестве разделителя между каноническим именем включающего класса и простым именем внутреннего класса.
Чтобы узнать больше о получении имени класса в Java.
docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.7
См. - docs.oracle.com/javase/6/docs/api/java/lang/Class.html или, может быть, просто напишите тест.
@GrahamBorland В документации javadoc говорится, что "как определено спецификацией языка Java" - так что вы можете найти это в этом документе. Просто потому, что это не интерактивная ссылка, люди могут приложить минимальные усилия и щелкнуть по первому результату поисковой системы.
@vbence: Большинство людей предпочли бы довести дело до конца, чем искать в JLS такие тривиальные вещи. Значит, это первый результат Google :)
См. Также: coderwall.com/p/lap9ww/…