我正在尝试学习/练习TDD,并决定需要创建一个不可变的类。
为了测试“不变性不变”(您能说吗?),我想我只是通过反射调用类中的所有公共方法,然后检查该类之后是否没有更改。这样一来,我以后就不太可能不小心破坏不变式。这本身可能是可行的,也可能是无效的,但我认为这对我来说也是一种反思。
getMethods()
:使用getMethods()
,我仅获得公共接口,但是当然这也包括所有继承的方法。然后的问题是,诸如wait()和notify()之类的方法会导致InvocationTargetExceptions,因为我还没有同步等等。
getDeclaredMethods()
:(天真吗?)假设只有我声明的方法才能够打破类的不变性,所以我尝试使用getDeclaredMethods()
代替方法。不幸的是,这将调用在类中声明的所有方法(私有和公共方法),而不是父类。私有方法显然是不相关的,因为它们允许打破不变性。
所以我的问题是,如何确定通过via获得的方法是否getDeclaredMethods()
是公共的,以便可以通过反射来调用它?浏览文档时,什么都没跳出来。
我可以看到解决此问题的其他方法,例如专门忽略诸如wait()等的方法,但这似乎比我能处理的还要骇客。
如注释中所述,您可以Method.getModifiers()
用来确定与该方法关联的修饰符。
例如
if (Modifier.isPublic(someMethod.getModifiers()) {
// etc.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句