: O. Yuanying

GloovyClassLoaderでStackOverflowError

なんていうかGroovyが使えないなーと思うのはこんなとこ。

まず、AというクラスをA.groobyというファイルに定義し、つぎにBというクラスをB.groovyというファイルに定義する。そしてAクラスとBクラスで相互にそのコード内でそれぞれ相手のインスタンスをnewしてやる。

// A.groovy
class A {
        def b = new B()
        
        def hello() {
                println "Hello!"
        }
        
        def bye() {
                b.bye()
        }
}
// B.groovy
class B {
        def a = new A()
        
        def hello() {
                a.hello()
        }
        
        def bye() {
                println "bye"
        }
}

そして以下のコードを実行してやると...

def a = new A()
a.bye()
Exception in thread "main" java.lang.StackOverflowError
	at java security.AccessController.doPrivileged(Native Method)
...

かなりいけてない。

どうやらAクラスをロードする際にBクラスをロードしようとして、Bクラス中で使用するAクラスをロードしようとしてBクラスをロードしようとして、Bクラス中で使用するAクラスをロードしようとして...

かなりいけてない。