obj.getClass().getSimpleName();
obj.getClass().getName();
obj.getClass().getCanonicalName();
В чем разница между каноническим именем, простым именем и именем класса ?
obj.getClass().getSimpleName();
obj.getClass().getName();
obj.getClass().getCanonicalName();
В чем разница между каноническим именем, простым именем и именем класса ?
Для понятия разницы сперва нужно рассмотреть данный пример:
//примитивный тип
System.out.println(int.class.getName());
System.out.println(int.class.getCanonicalName());
System.out.println(int.class.getSimpleName());
//класс
System.out.println(String.class.getName());
System.out.println(String.class.getCanonicalName());
System.out.println(String.class.getSimpleName());
//внутренний класс
System.out.println(HashMap.SimpleEntry.class.getName());
System.out.println(HashMap.SimpleEntry.class.getCanonicalName());
System.out.println(HashMap.SimpleEntry.class.getSimpleName());
//анонимный внутренний класс
System.out.println(new Serializable(){}.getClass().getName());
System.out.println(new Serializable(){}.getClass().getCanonicalName());
System.out.println(new Serializable(){}.getClass().getSimpleName());
Результат вывода:
int
int
int
java.lang.String
java.lang.String
String
java.util.AbstractMap$SimpleEntry
java.util.AbstractMap.SimpleEntry
SimpleEntry
ClassnameTest$1
null
// вернул пустую строку
имя - это имя, которое вы бы использовали для динамической загрузки класса.
каноническое имя - это имя, которое будет использоваться в операторе импорта и однозначно идентифицирует класс.
простое имя слабо идентифицирует класс.
Каноническое и простое имя может быть полезно во время использования toString.