Groovy ++ ошибка при добавлении @Typed - PullRequest
0 голосов
/ 02 января 2011

Я был заинтересован в тестировании увеличения производительности для 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.groovy

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 Версия: 1.7.5 JVM: 1.6.0_18

Есть идеи, почему?

Ответы [ 2 ]

0 голосов
/ 21 июня 2011

Все переменные, которые вы объявляете, имеют тип java.lang.Object (или в данном случае grovy.lang.Object).Поэтому у них нет методов «следующий» и т. Д.

Попробуйте использовать Person current = new Person() и Cain current = first и т. Д.

0 голосов
/ 02 января 2011

Чтобы пользоваться статически типизированной компиляцией, вам необходимо предоставить хотя бы некоторое количество информации о типе.

Обычно достаточно определить типы свойств (далее в вашем случае prev) и типы параметров метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...