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

Groovy 使用属性表示法调用私有方法,groovy,Groovy,下面的代码示例表明,您可以使用属性表示法调用私有方法,例如val而不是getVal(),也可能val=“something”而不是setVal(“something”) 我知道这种风格对公共方法是“官方支持”的,但它对私有方法的使用是否是一个bug/怪癖,应该依赖于它(很像从类外部访问私有成员的能力)?我可能理解错了,但在Java中不是也会发生同样的事情 看不出这与拥有: class PrivateTest { public String foo = getVal() ; privat

下面的代码示例表明,您可以使用属性表示法调用私有方法,例如
val
而不是
getVal()
,也可能
val=“something”
而不是
setVal(“something”)


我知道这种风格对公共方法是“官方支持”的,但它对私有方法的使用是否是一个bug/怪癖,应该依赖于它(很像从类外部访问私有成员的能力)?

我可能理解错了,但在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.8实例中(没有安全管理器),您可以执行以下操作

println new Date().fastTime
println new Date().normalize()
--编辑
我真的应该多加注意
在您的示例中,new Foo().Foo只是访问一个标准groovy属性。
另一方面,
newfoo().val
newfoo().getVal()
将实际访问私有成员

--编辑2

哇!我真的不记得了

我的观点是,在类内部,您可以仅使用
X
调用私有方法
getX()
,但我只读过的文档/书籍提到对公共方法使用此属性语法。我想知道的是,在私有方法中也使用它是否合适?仅仅因为它可以工作,并不一定意味着它可以。@groovy现在甚至有私有的概念吗?我认为它会尝试调用
getX
,如果它存在的话,不管它的访问级别是什么Groovy肯定有私有的概念,但是当前的实现是有缺陷的
println new Date().fastTime
println new Date().normalize()