问题
无论您将字段定义为公共字段还是私有Groovy,似乎都可以通过自动创建的访问器将其公开访问。这里有几篇文章建议仅在您的字段未声明为私有时才会发生这种情况。除了Groovy 2.5之外,我可以说所有版本,而我怀疑更高,那绝对不是。
示例
private Collection<BeanDefinition> unknownLocalBeans = new HashSet()
每个人都可以访问变量unkwownLocalBeans,尽管我不希望任何人都可以使用它,包括通过getter方法。
问题
是否有办法在Groovy中获得实际的私有访问权或禁用自动生成功能?我有一些不应具有访问器的类,使它们可用可邀请开发人员执行他们不应该做的事情。
答案 0 :(得分:1)
您可以在Groovy中访问私有成员这一事实与自动生成的访问器无关。正式地,访问私有成员的能力是Groovy实施中的一个错误,即Groovy语言规范中没有任何内容。表示您应该能够访问私人成员。
但是,此错误已经存在了很长时间,几乎已被接受为事实上的功能。修复此错误的可能性很小,因为有很多程序依赖于访问私有成员的能力,而如果修复此缺陷,则该私有性会崩溃。
就个人而言,我认为没有办法将数据封装在一个类中,但是其他人则不同意并发现访问私有成员的能力是一种遗憾,例如编写测试时。
在某些情况下,您无法访问用@CompileStatic
注释的类的私有成员,但是此注释引入了一些您可能不喜欢的限制。