Поле "name" для Integer.class возвращает ноль - PullRequest
0 голосов
/ 23 января 2019

Класс java.lang.Class имеет личное поле имя . Я пытаюсь получить значение этого поля для разных экземпляров Class, но когда дело доходит до Integer.class , возвращаемое значение равно нулю. Вот пример кода:

import java.lang.reflect.Field;

public class Test {

  public static void main(String[] args) throws Throwable {
    Class<Object> objectCls = Object.class;
    Class<Integer> integerCls = Integer.class;
    Class<Class> classCls = Class.class;
    Field nameField = classCls.getDeclaredField("name");
    nameField.setAccessible(true);
    System.out.println(nameField.get(objectCls));
    System.out.println(nameField.get(integerCls));
    System.out.println(nameField.get(classCls));
  }
}

Вывод будет:

java.lang.Object
null
java.lang.Class

Также я попытался выполнить с онлайн-компиляторами, которые использовали JDK 9 и 10, и это было хорошо. Так что проблема в том, когда я выполняю этот код с JDK 8.

1 Ответ

0 голосов
/ 23 января 2019
instead of using private field through reflection You can just use integerCls.getName()

import java.lang.reflect.Field;
 public class Test {
public static void main(String[] args) throws Throwable {
 Class<Object> objectCls = Object.class;
Class<Integer> integerCls = Integer.class;
Class<Class> classCls = Class.class;
Field nameField = classCls.getDeclaredField("name");
nameField.setAccessible(true);
System.out.println(nameField.get(objectCls));
/*System.out.println(nameField.get(integerCls));*/
System.out.println(integerCls.getName());
System.out.println(nameField.get(classCls));

}}

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