使用属性表示法调用私有方法

时间:2011-06-09 09:54:11

标签: groovy

下面的代码示例表明您可以使用属性表示法调用私有方法,例如val代替getVal(),大概是val = "something"代替setVal("something")

class Foo {

  String foo = val    
  private getVal() { "val"}
}

assert new Foo().foo == "val"

我知道这种风格对于公共方法是“官方支持的”,但它是私有方法的用途,一个人应该依赖的bug / quirk(非常类似于从类外部访问私有成员的能力) ?

2 个答案:

答案 0 :(得分:0)

我可能得到了错误的结局,但在Java中却没有发生同样的事情......

看不出与以下有何不同:

class PrivateTest {
  public String foo = getVal() ;

  private String getVal() {
    return "val" ;
  }
}

然后是测试类:

public class PrivateMain {
  public static void main( String[] args ) {
    PrivateTest pt = new PrivateTest() ;
    System.out.println( pt.foo ) ;
  }
}

测试类仍将打印出val

答案 1 :(得分:0)

现在你提到它了...... 我不记得如何处理私人成员。

但至少在我运行的1.8实例中(没有安全管理器),你可以做一些事情,比如

println new Date().fastTime
println new Date().normalize()

- 编辑
我应该多加注意 在你的例子中,新的Foo()。foo只是访问标准的groovy属性 另一方面,new Foo().valnew Foo().getVal()实际上会访问私人会员。

- 编辑2
哇。我真的不记得了GROOVY-3010