Что Class.getName () делает для данного класса? - PullRequest
11 голосов
/ 21 марта 2011

Предположим, у меня есть класс "employee", имеющий объект obj. тогда как будет выполняться оператор obj.getClass (). getName ()? И что это должно быть возвращение?

Ответы [ 3 ]

20 голосов
/ 21 марта 2011

Метод getClass() получает фактический класс объекта, который может отличаться от класса переменной, содержащей объект. Метод getName() вернет полный пакет плюс имя класса этого класса в виде строки, например:

com.company.project.package.MyClass

Например, следующий код выводит вышеуказанную строку:

package com.company.project.package;

class MyClass extends Object {
  // some definition
}

Object o = new MyClass();
System.out.println(o.getClass().getName());
0 голосов
/ 02 марта 2018

Отказ от ответственности: хотя ответ Эрика правильный, он не полный.

Короче говоря

Этот метод похож на getCanonicalName () с разницей - он возвращает двоичное имя класса, где каноническая версия возвращает ноль (например, для анонимных классов).

информация

Если этот объект класса представляет ссылочный тип, который не является типом массива, то возвращается двоичное имя класса:

String.class.getName()
    returns "java.lang.String"
(new Object() {}).getClass().getName()
    returns "test.Main$1"

Если этот объект класса представляет примитивный тип или void, то возвращаемое имя является строкой, равной ключевому слову языка Java, соответствующему примитивному типу или void.

byte.class.getName()
    returns "byte"
long.class.getName()
    returns "long"

Если этот объект класса представляет класс массивов, то внутренняя форма имени состоит из имени типа элемента, которому предшествует один или несколько символов '[', представляющих глубину вложения массива:

(new Object[3]).getClass().getName()
    returns "[Ljava.lang.Object;"
(new int[3][4][5][6][7][8][9]).getClass().getName()
    returns "[[[[[[[I"

Кодировка имен типов элементов выглядит следующим образом:

Element Type           Encoding
boolean                Z
byte                   B
char                   C
class or interface     L<classname>;
double                 D
float                  F
int                    I
long                   J
short                  S

Официальные документы по этому методу: https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--

0 голосов
/ 21 марта 2011

Имя класса, в вашем случае "employee" или "my.package.employee".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...