用Java覆盖访问器

时间:2014-04-01 00:42:42

标签: java accessor

有没有办法在Java中覆盖对象属性的默认访问器?

例如,如果我调用Foo.bar,有没有办法知道何时访问bar属性而不使用getter函数?

3 个答案:

答案 0 :(得分:4)

没有。 Foo应该写成这样:

private [type] bar;
public [type] getBar() { return bar; }

这允许您在访问栏时执行操作。如果酒吧是公开的,那么你运气不好。

答案 1 :(得分:4)

你是什么意思,"without using a getter function"?如果您扩展Foo并 覆盖 bar的getter方法,并且bar是私有的,那么您可以找到它何时被访问。

这就是为什么属性 应该 都是私有的一个原因,这样程序员就可以完全控制所看到的内容,由谁以及可以更改的内容。< / p>

答案 2 :(得分:1)

如果我理解你的问题,

  

例如,如果我调用Foo.bar,有没有办法知道何时访问bar属性而不使用getter函数?

想想这个问题。 getter将允许您添加此功能。如果属性是私有的,则此问题会消失,因为任何调用者都需要使用适当的getter调用。这是一个根深蒂固的Java Bean标准。

可以使用面向方面编程(例如AOP:AspectJ)将方面编织到代码中来截取字段访问,但是这个解决方案有一些警告超出了你的问题的范围,但很高兴回答另一个: - )