class GroovyClass {
def aVariable
void setAVariable(aVariable)
{
this.aVariable = aVariable;
}
}
我的理解是我们不需要在groovy类中指定变量的类型。但是如果我声明'aVariable',Groovy编译器会抱怨,为什么它不被视为具有默认可访问性的无类型变量?是否应该使用Groovy中的def定义每个变量本地和类?为什么函数定义不必以def开头?当我将变量传递给setter时,它不需要任何def吗?
答案 0 :(得分:0)
该代码工作正常。你是什么意思“Groovy编译器抱怨”?
如果需要,您可以使用def
定义该函数,它将返回aVariable
(因为这是赋值操作符返回的内容),但是,它不会遵循Java Bean的标准在setters中应该返回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
}
考虑到这一点,我现在没有理由想到这个限制(因为你可以在Groovy中声明没有def
的变量),但是存在限制,所以你需要输入def
在定义类属性时。