2016-11-29 4 views
2

私はtest.groovyとして次のGroovyスクリプトはしている静的なクラスを解決することはできません。Groovyは

groovy -cp code/ test.groovy 

groovy -v reports 2.4.7 )

"Hello、world"を成功させて印刷することが期待されます。その代わり、私が手:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
/tmp/test.groovy: 4: unable to resolve class Vehicle.Deserializer 
@ line 4, column 10. 
    def test=new Vehicle.Deserializer(); 
      ^

1 error 

スクリプトは前の行に失敗していないので、Groovyは問題なくVehicleクラスを見つけることです。静的クラスDeserializerが見つかりません。

しかし、このスクリプトはうまく動作します:

public class Vehicle { 
    public static class Deserializer { 
    } 
} 

def ok=new Vehicle(); 
def test=new Vehicle.Deserializer(); 

println "Hello, world!" 

は、私はGroovyのは、静的クラス(とその外側のクラスが)で定義されている静的クラスで作業できるようにするためにやっている必要があるものがあります別のGroovyファイルですか?


UPDATE:私はthis issueを見つけたとGroovyは、少なくとも一種のDeserializerクラスを見ることができることを確認することができます

import test.Vehicle; 
import static test.Vehicle.Deserializer; 

println Deserializer.class.name 

def ok=new Vehicle(); 
// def test=new Vehicle.Deserializer(); 

println "Hello, world!" 

予想通り、この作品:

test.Vehicle$Deserializer 
Hello, world! 

しかし、コメントを外すとdef test=new Vehicle.Deserializer();はまだ私にエラーをもたらし、それはdef test=new Deserializer();に変更されます( import static)。

+0

を私は自分自身をテストしていませんが、あなたは、インポート 'としてtest.groovy''にだけでなく、明示的に静的なクラスをインポートしようとしています静的テスト.Vehicle.Deserializer'? – dmahapatro

+0

@dmahapatro: 'import test.Vehicle.Deserializer'は、その行を指す第2の「クラスを解決できません」というエラーになります。不思議なことに、 'import static test.Vehicle.Deserializer'は2番目のエラーを発生させませんが、最初のエラーはクリアされません。 – CommonsWare

+0

はい、同じことが目撃されました。私は 'test.groovy'を実行する前に' groovyc'によって 'Vehicle.groovy'をコンパイルしようとしていましたが、それでも私は不平を感じます。それは問題かもしれません。 – dmahapatro

答えて

1

これはa known Groovy bugのようです。あなたの静的クラスは、ゼロ引数のコンストラクタを持っている場合は、newInstance()を経由して、この問題を回避することができます

import test.Vehicle; 
import static test.Vehicle.Deserializer; 

def ok=new Vehicle(); 
def test=Deserializer.class.newInstance(); 

println "Hello, world!"