У меня есть POJO, который выглядит так:
public class Task {
private TaskData taskData;
String id;
private int status;
private int success;
private int error;
}
class TaskData {
transient LinkedList<String> list0;
transient LinkedList<String> list1;
}
списки в TaskData могут быть огромными (более 100 мб).
При получении всех объектов из Map<String, Task> tasksMap = new HashMap() я не хочу, чтобы TaskData поля включались/загружались. Как я могу достичь этого?
P.S. Это не связано с сериализацией.
Обновлять: под "получением всех объектов" я имею в виду, например:
class SomeClass {
Map<String, Task> tasksMap = new HashMap()
SomeClass() {
//...initialize multiple tasks with huge list0, list1..
// => add them all
tasksMap.put("abc0", task);
tasksMap.put("abc1", task);
tasksMap.put("abc2", task);
tasksMap.put("abc3", task);
}
Map<String, Task> tasksMap getMap() {
// when i get all the map's objects, i want the received `Task` objects
// to not have `TaskData` attribute
return tasksMap;
}
}
Я могу придумать одно решение, реализовать свою собственную карту и переопределить put() и удалить TaskData при вставке в карту.
Непонятно, о чем вы спрашиваете: что вы подразумеваете под «включено/загружено»?
также неясно, что он подразумевает под «получением всех объектов из Карта<Строка......
это не очень важно, как загружается tasksMap. (я полагаю, вы имеете в виду инициализированный?). дело в том, что есть огромные списки в момент, когда я получаю все объекты из tasksMap




Дайте полю значение по умолчанию, равное null, а затем обновите значение позже, используя метод установки.
public class Task {
private TaskData taskData;
String id;
private int status;
private int success;
private int error;
}
class TaskData {
transient LinkedList<String> list0 = null;
transient LinkedList<String> list1 = null;
public void setList0(LinkedList<String> list){
list0 = list;
}
public void setList1(LinkedList<String> list){
list1 = list;
}
}
конечно, я могу это сделать, но в тот момент, когда мне нужно все tasksMap, я уверен, что списки огромны, а не null
Я думаю, что другим подходом было бы создание метода поверхностного копирования, исключающего поля, которые вам не нужны, и использование его при заполнении карты, например:
public Task shallowCopy() {
Task newTask = new Task();
newTask.id = id;
newTask.status = status;
...
return newTask;
}
тем не менее, когда я запрашиваю все объекты из tasksMap, я полагаю, что все атрибуты (включая огромные списки) этих объектов загружаются
Как загрузить карту
tasksMap?