2015-06-10 3 views
0

Я довольно новичок в groovy (и у меня нет опыта работы с Java), но я столкнулся с проблемой, которая для меня не имеет смысла. Я предполагаю, что мое непонимание того, как объекты и классы работают на этих языках. Мой вопрос, вероятно, очень прост - любая помощь очень ценится.Groovy TimeDuration Типы аргументов

Я пытаюсь рассчитать количество недель между двумя датами. Мой код это (может быть более кратким, но я расширил его, чтобы сделать каждый шаг более четкий):

import groovy.time.TimeCategory 

start = new Date(year: 2014, month: Calendar.APRIL, date: 1, hours: 12, minutes: 12, seconds: 0) 
finish = new Date(year: 2014, month: Calendar.MAY, date: 4, hours: 1, minutes: 12, seconds: 0) 


use (TimeCategory) { 
    diff = finish - start 
    println getWeeks(diff)  
} 

Я получаю сообщение об ошибке

groovy.lang.MissingMethodException: Нет подписи по методу: Script1.getWeeks() применяется для типов аргументов: (groovy.time.TimeDuration) значения: [32 дней, 13 часов]

Однако, если изменить линию печати на println diff.getClass().name

Мои результаты Выход

groovy.time.TimeDuration

Так что мой вопрос по существу: если diff объект класса groovy.time.TimeDuration и getWeeks требует аргументов этого класса, почему я получить сообщение об ошибке?

ответ

1

вы должны использовать:

use (TimeCategory) { 
    diff = finish - start 
    println diff.weeks 
} 

, что вы видите в заводной документ static Duration getWeeks(Integer self) является как заводной система вызывает методы.

Почти вся такая статическая заводная метода имеет такую ​​форму: static doSmth(self, otherArgs...) и вы должны назвать его как self.doSmth(otherArgs...)

Смежные вопросы