【发布时间】:2014-07-10 08:03:54
【问题描述】:
上下文:
我正在尝试学习/练习 TDD,并决定我需要创建一个不可变类。
为了测试“不变性不变性”(你能这么说吗?),我想我会通过反射调用类中的所有公共方法,然后检查类之后是否没有改变。这样我以后不太可能不小心打破不变量。这本身可能是也可能不是实用/有效,但我认为这对我来说也是一种反思。
策略:
- 使用
getMethods():
使用getMethods(),我只获得了公共接口,当然这也包括所有继承的方法。
那么问题是诸如wait()和notify()之类的方法会导致InvocationTargetExceptions,因为我还没有同步等等……
- 使用
getDeclaredMethods():
(天真的?)假设只有我声明的方法能够破坏类的不变性,我尝试使用getDeclaredMethods()。
不幸的是,这会调用类中声明的所有方法,私有和公共,但不是超类。私有方法显然是不相关的,因为它们被允许破坏不变性。
问题:
所以我的问题是,我怎样才能知道通过getDeclaredMethods() 获得的方法是否是公共的,以便我可以通过反射调用它?翻阅文档时,我没有任何反应...
我可以看到解决此问题的其他方法,例如专门忽略 wait() 等方法,但这似乎比我能处理的还要复杂。
【问题讨论】:
-
@JBNizet 为什么不把这个作为答案呢?
-
@MarkW 1. 懒惰。 2.让OP意识到只需阅读javadoc就可以回答这样的问题。
-
@JBNizet 马克说了什么。我想我需要更深入地查看文档。我确实看过它们,正如我所说,没有什么“跳出来”!如果您不想添加答案,我很乐意自己做。
标签: java reflection visibility access-modifiers