时髦的语言错误

时间:2009-11-10 21:05:52

标签: 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")

这意味着:

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

在我看来,这些都是非常严重的语言错误。虽然我非常喜欢Groovy,但我觉得这种语言已经存在了相当长的时间,并没有像正确的隐私概念那样实现基本的东西。

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

谢谢, 唐

1 个答案:

答案 0 :(得分:4)

这是故意的,可悲的。这改变了1.5。不幸的是,为了支持它们的闭包机制及其元对象协议,它们必须能够访问私有成员。

本文更全面地解释了:http://www.benjaminbooth.com/tableorbooth/2008/07/groovy-15-no-private-for-you.html