内の匿名クラスでインスタンス変数を宣言し、Groovyでこのコードはうまく機能:は、例えば列挙
def f = new Runnable() {
def test = "Hello!"
@Override
void run() {
println(test)
}
}
f.run()
それはコンソールにHello!
を印刷します。ここでの主なアイデアは、匿名クラス内でインスタンス変数を使用することです。あなたは、一定の引数を列挙するために、このような匿名クラスのインスタンスを移動すると しかし、今では動作しません:
enum E {
E1(new Runnable() {
def test = "Hello!"
@Override
void run() {
println(test)
}
})
def runnable
E(def r) {
runnable = r
}
}
E.E1.runnable.run()
エラーがコンソールに表示されます。
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
ideaGroovyConsole.groovy: 23: Apparent variable 'test' was found in a static scope but doesn't refer to a local variable, static field or class. Possible causes:
You attempted to reference a variable in the binding or an instance variable from a static context.
You misspelled a classname or statically imported field. Please check the spelling.
You attempted to use a method 'test' but left out brackets in a place not allowed by the grammar.
@ line 23, column 21.
println(test)
^
これは、変数が(静的スコープで発見されたと述べていますなぜ?)でも、それを静的フィールドとして使用することさえできません。
しかし、それは匿名クラス内の変数せずに動作します:
enum E {
E1(new Runnable() {
@Override
void run() {
println("Hello!")
}
})
def runnable
E(def r) {
runnable = r
}
}
E.E1.runnable.run()
、Javaのような匿名クラス内のインスタンス変数で動作するようにGroovyのを強制的にどのように?
内部クラスは、Groovyのは、Javaから少し外れるこれらの分野のいずれかです。 http://groovy-lang.org/differences.html#_inner_classes – bdkosher
@bdkosherはい、私は[こちら](http://www.groovy-lang.org/single-page-documentation.html)を読んでいますが問題です私の質問では、より多くの驚いたリンクの違いを述べた – cybersoft