groovy 语言错误

Dón*_*nal 2 groovy

在 Groovy 控制台中,以下代码执行没有错误:

class F {
  private def getFoo() {"foo"}
  private def barValue = "bar"
}

def f = new F()
assert f.barValue == "bar"
assert f.properties.containsKey("foo")
Run Code Online (Sandbox Code Playgroud)

这意味着:

  • 可以在类外访问类的私有成员
  • 类的属性派生自私有(和公共)getter/setter 方法

在我看来,这两个都是极其严重的语言错误。尽管我真的很喜欢 Groovy,但我觉得不可思议的是,一种已经存在了相当长一段时间的语言,却没有正确地实现像隐私概念这样基本的东西。

这些实际上是错误还是我遗漏了什么?

谢谢,唐

Ben*_*Cox 5

可悲的是,这是故意的。这在 1.5 中发生了变化。不幸的是,为了支持他们的闭包机制和他们的元对象协议,他们必须能够访问私有成员。

这篇文章解释得更彻底一点:http : //www.benjaminbooth.com/tableorbooth/2008/07/groovy-15-no-private-for-you.html