我开始研究Groovy,对于如何定义类参数我有一些复杂的感觉。默认情况下,它们包括getter和setter,但是如果我不想拥有setter呢?限制为仅允许获取属性值的方法是什么?在C#中可以这样做:
public double Hours
{
get { return seconds / 3600; }
}
如果我没弄错的话。
答案 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。