繁体   English   中英

Java 只获取某些对象字段

[英]Java get only certain object fields

我有一个看起来像这样的 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的列表可能很大(超过 100mb)。

Map<String, Task> tasksMap = new HashMap()获取所有对象时,我不希望包含/加载TaskData字段。 我怎样才能实现它?

PS 与序列化无关。

更新:通过“获取所有对象”我的意思是,例如:

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

为该字段指定一个默认值 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;
    }
}

我认为另一种方法是创建一个浅拷贝方法,排除您不想要的字段,并在填充 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