Использование отражения для динамического сохранения всех полей в классе?( "<FieldName>", "<FieldValue>") - PullRequest
3 голосов
/ 07 февраля 2012

Я пытаюсь избежать жесткого кодирования сериализации класса конфигурации с помощью Reflection, и я столкнулся с ситуацией, когда я ничего не могу понять.Вот что я пытаюсь сделать.

У меня есть такой класс:

public class Configuration {

   public boolean bool = false;
   public int integer = 1;
   public int[] intArray = {0, 1};

}

Я хочу использовать отражение, чтобы сохранить имена и значения в свойствахfield.

--properties--
bool=false
integer=1
intArray=0,1

Название довольно простое.Моя проблема заключается в получении значения каждого поля, и особенно в получении значения каждого int [].Кроме массивов, все значения примитивны, поэтому toString () будет работать просто отлично.

Кто-нибудь может показать лучшие примеры, чем Oracle, и помочь мне?

Ответы [ 2 ]

3 голосов
/ 07 февраля 2012

Вам нужно использовать массив? Если нет, вы можете представить свой объект в виде списка, и это будет печатать представление списка ваших целых чисел.

public boolean bool = false;
public int integer = 1;
public int[] intArray = {0, 1}; // <-- This prints array's memory address
public List<Integer> intList = Arrays.asList(1, 2 , 3); // <-- This prints [1,2,3]

public static void main(String[] args) throws Exception {
     Config c = new Config();
     for ( Field f : c.getClass().getDeclaredFields() ) {
           System.out.println(f.get(c));
     }

 }

Кроме того, вы можете просто сделать это во время выполнения.

if ( "int[]".equals(f.getType().getSimpleName() ) ) {
   // do stuff
}
0 голосов
/ 07 февраля 2012

Вы можете использовать метод java.utils.Arrays.toString (int [] a). чтобы получить правильный тип массива, вы можете использовать f.getType (). isArray () и f.getType (). getComponentType () в ответе Кала.

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