Don';不允许在Groovy中使用setter

Don';不允许在Groovy中使用setter,groovy,Groovy,我已经开始研究Groovy,对于如何定义类参数,我有一些复杂的感觉。默认情况下,它们包括getter和setter,但是如果我不想要setter呢?限制只允许获取财产价值的方法是什么?在C#中,可以这样做: public double Hours { get { return seconds / 3600; } } 如果我没有弄错。如果将属性声明为final,则不会创建setter 或者,如果声明自己的私有/受保护setter,则不会创建公共setter 因此,如您的示例所示: Int

我已经开始研究Groovy,对于如何定义类参数,我有一些复杂的感觉。默认情况下,它们包括getter和setter,但是如果我不想要setter呢?限制只允许获取财产价值的方法是什么?在C#中,可以这样做:

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()
    }
}