0
class GroovyClass {
  def aVariable

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

我的理解是我们不需要在 groovy 类中指定变量的类型。但是如果我声明 'aVariable',Groovy 编译器会抱怨,为什么不将它视为具有默认可访问性的无类型变量?每个变量都应该在 Groovy 中定义 local 和 class 吗?为什么函数定义不必以 def 开头?当我将变量传递给setter时,它不需要任何def吗?

4

1 回答 1

0

该代码工作正常。“Groovy 编译器抱怨”是什么意思?

如果需要,您可以使用 a 定义该函数def,它会返回aVariable(因为这是赋值操作返回的内容),但是,它不会遵循 Java Beans 的标准,因为 setter 应该返回 null

但是,鉴于此,我可以运行:

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
}

想一想,我目前没有理由想到这个限制(因为您可以def在没有 Groovy 的情况下声明 vars),但是限制是存在的,因此您需要def在定义类属性时键入。

于 2012-10-28T23:57:58.950 回答