MyCounter
Groovyでは、次のコードが渡されるように、と呼ばれるActiveObjectインスタンスを実装する必要があります。
final MyCounter counter = new MyCounter()
counter.incrementBy 10
counter.incrementBy 20
counter.update 'Hello'
assert 35 == counter.value
私は以下にリストされた2つの実装を持ってきました-それらのどれも機能しません。
1.1。
@ActiveObject
class MyCounter
{
private int counter = 0
@ActiveMethod
def incrementBy(int value)
{
println "incrementBy $value"
counter += value;
}
@ActiveMethod
def update(String value)
{
println "update $value"
counter += value.size();
}
int getValue()
{
println "getValue"
return counter;
}
}
ブロックしないための呼び出しincrementBy
、たとえばvalueプロパティ、したがって実際には、incrementBy操作が終了する前にcounter変数にアクセスするため、これは機能しないと思います。
2.2。
@ActiveObject
class MyCounter
{
private int counter = 0
@ActiveMethod
def incrementBy(int value)
{
println "incrementBy $value"
counter += value;
}
@ActiveMethod
def update(String value)
{
println "update $value"
counter += value.size();
}
@ActiveMethod
int value()
{
println "getValue"
return counter;
}
}
コンパイラは私にそれを教えてくれます:
非ブロッキングメソッドは特定のタイプを返さないでください。代わりにdefまたはvoidを使用してください