Don';不允许在Groovy中使用setter
我已经开始研究Groovy,对于如何定义类参数,我有一些复杂的感觉。默认情况下,它们包括getter和setter,但是如果我不想要setter呢?限制只允许获取财产价值的方法是什么?在C#中,可以这样做:Don';不允许在Groovy中使用setter,groovy,Groovy,我已经开始研究Groovy,对于如何定义类参数,我有一些复杂的感觉。默认情况下,它们包括getter和setter,但是如果我不想要setter呢?限制只允许获取财产价值的方法是什么?在C#中,可以这样做: public double Hours { get { return seconds / 3600; } } 如果我没有弄错。如果将属性声明为final,则不会创建setter 或者,如果声明自己的私有/受保护setter,则不会创建公共setter 因此,如您的示例所示: Int
public double Hours
{
get { return seconds / 3600; }
}
如果我没有弄错。如果将属性声明为
final
,则不会创建setter
或者,如果声明自己的私有/受保护setter,则不会创建公共setter
因此,如您的示例所示:
Integer hours
private void setHours(Integer hours) {}
或:
在
groovy
中,一旦创建了字段,它将默认为public
,将创建setter和getter因此,您可以声明自己的setter或getter并指定访问级别,在这种情况下,将不会创建默认的访问级别
例子:
一种方法是利用Groovy的元编程特性。在这种情况下,覆盖
setProperty(字符串名、对象值)
方法来截获setter调用,而不是trow异常
class A {
String a
String b
void setProperty(String name, Object value){
throw new IllegalAccessError()
}
}
这也适用于getter,方法是重写
def getProperty(字符串名)
我仍然可以更改它的值吗?以某种方式或某种方式。只要它不是最终的。或者看看不可变注释和copyWithSorry,但这是不正确的。默认情况下,groovy中的所有字段都是公共的,而不是私有的。@Biskit1943是的,正确的,我只是修复了文本,谢谢这里要指出的是,在字段上没有显式指示public/private,groovy将默认为private
,但它也为其创建公共getter和setter。当使用=赋值运算符时,Grovvy会自动调用setter来设置值。所以,它看起来像是公开的,但事实并非如此。
private void setHours(Integer hours) {
seconds * 3600
}
class A {
String a
String b
void setProperty(String name, Object value){
throw new IllegalAccessError()
}
}