Я не уверен, что я делаю какую-то глупую ошибку. То, что я пытаюсь достичь, - это список JSON, и я хочу преобразовать их в несколько объектов в зависимости от аргумента переменной, переданного функции.
Unit u1= new Unit();
User us = new User();
//calling funtion
StaticUtil.MagicJsonMapper(list, u1,us);
System.out.println(u1.getUnitName()); //place -1 unitName is null after function call
Внутри статического класса я создал функцию
@SuppressWarnings("rawtypes")
public static void MagicJsonMapper(List list,Object... objects){
if(list.size()!= objects.length){
//TODO
System.out.println("parame'ter mismatch");
return;
}
int i=0;
ObjectMapper mapper = new ObjectMapper();
for(Object object : objects){
if(list.get(i) instanceof List){
MagicJsonMapper((List)list.get(i),object);
}
else{
objects[i] = mapper.convertValue(list.get(i), object.getClass());
}
i++;
}
//place -2 "objects" contains proper value of unitname
}
Проблема в том, что я до сих пор не получил правильное значение в параметре после завершения этого метода. Это означает, что значения аргументов не сохраняются, как в отличие от нормального поведения Java, это как-то связано с переменным аргументом. Просто для ясности я отлаживал код, а значения были в конце функции.
Массив objects
создается во время вызова функции и затем отбрасывается. Если вам нужно получить доступ к значениям из массива после вызова, вам нужно явно создать массив.