不要允许Groovy中的setter

时间:2015-03-07 17:39:05

标签: groovy

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

public double Hours
{
    get { return seconds / 3600; }
}

如果我没弄错的话。

3 个答案:

答案 0 :(得分:5)

如果您将该属性声明为final,则不会创建一个setter。

或者,如果您声明自己的私有/受保护的setter,则不会创建公共的setter。

所以,如你的例子所示:

Integer hours
private void setHours(Integer hours) {}

或者:

final Integer hours

答案 1 :(得分:0)

groovy中,一旦创建了字段,默认情况下它将是private,将创建setter和getter。

因此,您可以声明自己的setter或getter并指定访问级别,在这种情况下,不会创建默认级别。


例如:

 private void setHours(Integer hours) {
    seconds * 3600
  }

答案 2 :(得分:0)

一种方法是使用 Groovy 的元编程特性。在这种情况下覆盖 setProperty(String name, Object value) 方法来拦截 setter 调用和 trow 异常。

class A {
    String a
    String b

    void setProperty(String name, Object value){
        throw new IllegalAccessError()
    }
}

通过覆盖 def getProperty(String name),这也适用于 getter。