2017-01-12 2 views
0

Я пытаюсь иметь динамическое свойство в классе, поэтому при создании экземпляра он суммирует общие цели из свойства массива в моем классе.Динамический getter на классе 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 всегда возвращается в нуль.

У меня есть модульные тесты, чтобы знать, что метод моей суммы работает правильно.

+0

Даже после инициализации 'Игрок'? показывает ли он правильные «цели»? – Rao

ответ

0

У вас есть как Integer totalGoals, так и Integer getTotalGoals(). Если вы пытаетесь получить доступ к свойству снаружи он должен работать:

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

Но когда доступ из внутренней Person класса Groovy получит значение из поля, которое null.

Вам необходимо удалить поле или получить доступ к получателю явно, то есть this.getTotalGoals().

0

Если вы вызываете свойство внутри другого метода того же класса, вы должны использовать это добытчик:

class Player { 
    Integer getTotalGoals() { 42 } 

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

при использовании где-то еще, POJO нотация отлично:

Player p = new Player() 
assert 42 == p.totalGoals 
Смежные вопросы