0
class GroovyClass {
  def aVariable

  void setAVariable(aVariable)
  {
      this.aVariable  = aVariable;
  }
}

私の理解では、groovy クラスで変数の型を指定する必要はありません。しかし、'aVariable' を宣言すると、Groovy コンパイラが文句を言います。デフォルトのアクセシビリティを備えた型なし変数と見なされないのはなぜですか? すべての変数は、Groovy の local と class の両方で def を使用して定義する必要がありますか? 関数定義が def で始まる必要がないのはなぜですか? そして、セッターに変数を渡すとき、そこに定義は必要ありませんか?

4

1 に答える 1

0

そのコードは正常に動作します。「Groovy コンパイラが不平を言う」とはどういう意味ですか?

必要に応じてその関数を で定義することができdef、それは返さaVariableれます (それが割り当てオペラトップが返すものであるため)、ただし、セッターが null を返す必要があるという点で、Java Beans の標準には従いません。

ただし、次のように実行できます。

a = new GroovyClass()
a.aVariable = 3

そして、それはうまく動作します

編集

基本的に、それはすべて Groovy パーサーにかかっています。パーサーは、タイプまたは可視性を定義する 1..N キーワードのある種のリストと、変数の名前を予期します。したがって、以下はすべて有効です。

class OkA {
  def aValue
}

class OkB {
  private aValue
}

class OkC {
  private String aValue
}

しかし、(現在のパーサーでは) 次のように言うことはできません。

class BadA {
  aValue
}

考えてみると、現在この制限について考えられる理由はありません (Groovy では変数を宣言しなくてもよいため) が、制限があるため、クラス属性を定義するときdefに入力する必要があります。def

于 2012-10-28T23:57:58.950 に答える