class GroovyClass {
def aVariable
void setAVariable(aVariable)
{
this.aVariable = aVariable;
}
}我的理解是,我们不需要在groovy类中指定变量的类型。但是Groovy编译器抱怨说,如果我声明了'aVariable‘,为什么不把它当作默认可访问性的无类型变量呢?是否应该在Groovy中使用def定义每个变量,包括本地变量和类变量?为什么函数定义不必以def开头?当我把一个变量传递给setter时,它不需要任何def?
发布于 2012-10-29 07:57:59
这个代码运行得很好。你说"Groovy编译器抱怨“是什么意思?
如果需要,您可以使用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
}考虑到这一点,我目前没有理由考虑这个限制(因为您可以在Groovy中声明不带def的var),但是限制是存在的,所以在定义类属性时需要输入def。
https://stackoverflow.com/questions/13114158
复制相似问题