Groovy类的动态getter

时间:2017-01-12 05:10:35

标签: java groovy

我正在尝试在类上拥有动态属性,因此在创建实例时,它会从我的类中的数组属性中添加总目标。

这是我的班级和我尝试的内容

class Player {
    String id
    String name
    String teamName
    @JsonProperty("data")
    ArrayList<Integer> goals
    Integer totalGoals
    ArrayList<Integer> ratings
    Integer assists
    Integer manOfTheMatches
    Integer cleanSheets

    Integer getTotalGoals() {
        return ListUtil.sum(this.goals)
    }
}

但是这个totalGoals总是回来为null。

我有单元测试知道我的sum方法正常工作。

2 个答案:

答案 0 :(得分:0)

您同时定义了Integer totalGoalsInteger getTotalGoals()。 如果您尝试从外部访问该属性,它应该工作:

def p = new Person()
p.totalGoals // getTotalGoals() will be actually called

但是当从内部Person类访问时,Groovy将从字段中获取值null

您需要删除字段或明确访问getter,即this.getTotalGoals()

答案 1 :(得分:0)

如果你在同一个类的另一个方法中调用该属性,你应该使用它的getter:

class Player {
  Integer getTotalGoals() { 42 }

  def anotherMethod() {
    assert 42 == this.getTotalGoals()
  }
}

在其他地方使用时,POJO表示法很好:

Player p = new Player()
assert 42 == p.totalGoals