mal*_*rdz 4 java reflection visibility access-modifiers
我正在尝试学习/练习TDD并决定我需要创建一个不可变的类.
为了测试'immutability invariant'(你能这么说吗?)我想我会通过反射调用类中的所有公共方法,然后检查该类之后是否没有改变.这样我以后不太可能不小心打破不变量.这可能是也可能不是实际/有效的,但我认为这对我来说也是一种反思.
getMethods()
:使用getMethods()
,我只获得公共接口,但当然这包括所有继承的方法.那么问题是诸如wait()和notify()之类的方法会导致InvocationTargetExceptions,因为我还没有同步等...
getDeclaredMethods()
:(天真?)假设只有我声明的方法能够破坏类的不变性,我尝试使用getDeclaredMethods()
.不幸的是,这会调用在类中声明的所有方法,private和public,而不是超类.私人方法显然不相关,因为它们被允许打破不变性.
所以我的问题是,如何才能找出通过getDeclaredMethods()
公共获取的方法是否公开,以便我可以通过反射调用它?通过文档看我没有什么东西跳出来......
我可以看到解决这个问题的其他方法,比如特别忽略像wait()等方法,但这看起来比我能处理的更糟糕.
Dun*_*nes 14
如评论中所述,您可以使用它Method.getModifiers()
来确定与方法关联的修饰符.
例如
if (Modifier.isPublic(someMethod.getModifiers()) {
// etc.
}
Run Code Online (Sandbox Code Playgroud)