有没有办法在Java中覆盖对象属性的默认访问器?
例如,如果我调用Foo.bar,有没有办法知道何时访问bar属性而不使用getter函数?
答案 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)将方面编织到代码中来截取字段访问,但是这个解决方案有一些警告超出了你的问题的范围,但很高兴回答另一个: - )