确定正在代码中访问POJO的哪些字段

时间:2019-05-22 07:15:12

标签: java junit pojo

我有一个巨大的(父)POJO,该POJO正在某些组件中使用。 POJO具有单独的字段以及嵌套的POJO。是否可以确定正在该组件中访问此POJO中的所有字段/嵌套字段?

我在考虑JUnits /方面,但不确定两者是否都能工作。我尝试浏览SF /和Google,但找不到与此相关的任何主题线程。

说下面是一个示例POJO:

public class Student {

  private String name;
  private Date date;
  private Subject subject;

  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Date getDate() {
    return date;
  }
  public void setDate(Date date) {
    this.date = date;
  }
  public Subject getSubject() {
    return subject;
  }
  public void setSubject(Subject subject) {
    this.subject = subject;
  }

}

它具有三个字段名称,日期和主题,但我的组件中不会使用所有这些字段。因此,我需要确定实际使用的是哪个。

编辑: 感谢Sharon指出,getter / setter受到了保护。我只是为了提问而即时生成了该类,却没有注意到问题。现在已更正。 类的初始化方式:就组件而言,将根据Json / XML数据创建对象,并且仅调用getter方法。 至于静态与运行时分析,如果可能的话,我宁愿通过静态代码分析来实现它,否则运行时对我来说就比较容易了。 至于使用Decorator模式,是否有什么需要不需要更改现有代码的东西?这就是为什么我在考虑JUnits是否可以做到这一点。

1 个答案:

答案 0 :(得分:1)

首先,看到受保护的getter / setter方法很奇怪。在我看来,他们需要公开吗?
无论如何,我会使用Decorator design pattern。 从链接的文章中:

  

装饰器设计模式允许我们动态添加   对象的功能和行为,而不影响行为   同一类中其他现有对象的数量。

因此,我们装饰有色的Student应该从目标类继承。所有方法都可以记录其用法并调用super来调用目标操作。您没有说Student如何 已初始化,但无论如何,您将需要对其进行修改以创建LogUsageStudent

的实例
public class LogUsageStudent extends Student {

  protected String getName() {
    // log usage of getName() 
    return super.getName();
  }
  // etc
}