简体   繁体   English

Java 只获取某些对象字段

[英]Java get only certain object fields

I have a POJO which looks like this:我有一个看起来像这样的 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;
}

the lists in TaskData can be huge (over 100mb). TaskData的列表可能很大(超过 100mb)。

When getting all objects from Map<String, Task> tasksMap = new HashMap() I don't want TaskData fields to be included / be loaded.Map<String, Task> tasksMap = new HashMap()获取所有对象时,我不希望包含/加载TaskData字段。 How can i achieve it?我怎样才能实现它?

PS It is not related to serialization. PS 与序列化无关。

Update: by "getting all objects" i mean, ex:更新:通过“获取所有对象”我的意思是,例如:

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;
   }
}

Give the field a default value of null, then update the value later, using a setter method.为该字段指定一个默认值 null,然后稍后使用 setter 方法更新该值。

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;
    }
}

I think another approach would be to create a shallow copy method, excluding the fields you don't want, and use it when populating you Map, eg :我认为另一种方法是创建一个浅拷贝方法,排除您不想要的字段,并在填充 Map 时使用它,例如:

  public Task shallowCopy() {
    Task newTask = new Task();
    newTask.id = id;
    newTask.status = status;
    ...
    return newTask;
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM