Ошибка Groovy ++ при добавлении @typed
Вопрос
Я был заинтересован в тестировании прироста производительности для Groovy ++ по сравнению с простым Groovy. Я нашел сценарий для тестирования
class Chain
{
def size
def first
def init(siz)
{
def last
size = siz
for(def i = 0 ; i < siz ; i++)
{
def current = new Person()
current.count = i
if (i == 0) first = current
if (last != null)
{
last.next = current
}
current.prev = last
last = current
}
first.prev = last
last.next = first
}
def kill(nth)
{
def current = first
def shout = 1
while(current.next != current)
{
shout = current.shout(shout,nth)
current = current.next
}
first = current
}
}
class Person
{
def count
def prev
def next
def shout(shout,deadif)
{
if (shout < deadif)
{
return (shout + 1)
}
prev.next = next
next.prev = prev
return 1
}
}
def main(args)
{
println "Starting"
def ITER = 100000
def start = System.nanoTime()
for(def i = 0 ; i < ITER ; i++)
{
def chain = new Chain()
chain.init(40)
chain.kill(3)
}
def end = System.nanoTime()
println "Total time = " + ((end - start)/(ITER * 1000)) + " microseconds"
}
Оно работает. Но если я попытаюсь добавить
@Typed
Перед именем первого класса и запуска я получаю ошибку:
#groovy Groovy.grovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/home/melco/test/groovy.groovy: 18: Cannot find property next of class Object
@ line 18, column 22.
last.next = current
^
1 error
# Groovy -version
Groovy Version: 1.7.5 JVM: 1.6.0_18
Есть идеи почему?
Решение
Чтобы насладиться статически напечатанной компиляцией, вам необходимо предоставить как минимум некоторую информацию типа.
Обычно этого достаточно для определения типов свойств (далее, Prev в вашем случае) и типов параметров метода.
Другие советы
Все переменные, которые вы объявляете, имеют тип java.lang.object (или grovy.lang.object в этом случае). Таким образом, у них нет методов «Далее» и т. Д.
Попробуй использовать Person current = new Person()
а также Cain current = first
и т.п.