Получить имя класса поля из отражения - PullRequest
3 голосов
/ 19 января 2012

Я хожу по кругу на этом.

У меня есть класс Person, например,

public class Person {
String name = "";
}

Теперь я хотел бы проанализировать этот экземпляр класса и выяснить, какой класс называется именем.объявлен как.

Итак, name = String или java.lang.String

Это мой код:

'this' является экземпляром Person.

try {
    String className = this.getClass().getName();
        Class cls = Class.forName(className);
        Field fieldlist[] = cls.getDeclaredFields();
        for (int i = 0; i < fieldlist.length; i++) {
           Field fld = fieldlist[i];
           int mod = fld.getModifiers();
           System.out.println("1. " + fld.toGenericString());
           System.out.println("2. " + fld.getName());
           System.out.println("3. " + fld.getGenericType() + "]");



           Object oj = fld.getType();

           // Says that 4: class java.lang.String

           System.out.println("4: " + oj.toString());
           Class c1 = oj.getClass();

           // Should throw Exception
           String stype = c1.getDeclaringClass().toString();
           System.out.println("5. " + stype);


        }
      }
      catch (Throwable e) {
         System.err.println(e);
      }

Мне удалось добраться до части, в которой говорится:

класс java.lang.String

, но мне нужно, чтобы он был "java.lang.String"

Есть идеи?

Ответы [ 4 ]

4 голосов
/ 19 января 2012

Попробуйте .. getType () и затем getName ()

 fld.getType().getName()

Редактировать: (Комментарий Aften Green Days) - Обратите внимание, что fld.getType().getCanonicalName() выдаст одинаковый вывод в большинстве случаев. Вывод отличается, когда используются внутренние классы. Вот ссылка пришла из поиска. В зависимости от того, что вам нужно сделать с именем класса, вы можете выбрать один из методов getName () или getCanonicalName ()

2 голосов
/ 19 января 2012
System.out.println("3. " + fld.getType().getCanonicalName()); 

Результат:

3. java.lang.String
0 голосов
/ 01 марта 2016

Я получил имя класса поля, вызвав это f.getDeclaringClass (). getSimpleName ()

0 голосов
/ 19 января 2012

Я думаю, я решил это,

Должен был сделать это:

String stype = fld.getType().getName();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...