我如何才能找到什么方法's的可见性是通过反射实现的



上下文:

我正在尝试学习/实践TDD,并决定需要创建一个不可变的类。

为了测试"不变性不变量"(你能这么说吗?(我想我只需要通过反射调用类中的所有公共方法,然后检查类之后是否没有更改。这样我以后就不太可能不小心打破不变量了。这本身可能实用,也可能不实用,但我认为这对我来说也是一次反思。

策略:

  • 使用getMethods()

使用getMethods(),我只获得了公共接口,当然这也包括所有继承的方法。问题是wait((和notify((等方法会导致InvocationTargetException,因为我还没有同步等等

  • 使用getDeclaredMethods()

(天真地?(假设只有我声明的方法才能破坏类的不变性,我尝试使用getDeclaredMethods()。不幸的是,这会调用类中声明的所有方法,私有和公共方法,但不会调用超类。私有方法显然是不相关的,因为它们被允许打破不变性。

问题:

所以我的问题是,我如何找出通过getDeclaredMethods()获得的方法是否是公共的,以便我可以通过反射调用它?没有什么东西从我身上跳出来。。。

我可以看到解决这个问题的其他方法,比如专门忽略wait((等方法,但这似乎比我能处理的还要棘手。

如注释中所述,您可以使用Method.getModifiers()来确定与该方法关联的修饰符。

例如

if (Modifier.isPublic(someMethod.getModifiers()) {
  // etc.
}

还有另一种方法。如果您执行类似Modifier.toString(m.getModifiers(((的操作;它将返回一个可见性字符串。如果您只是想弄清楚可见性,这将非常有用。如果你正在尝试测试特定类型(比如只在可见性为公共的情况下做一些事情(,那么这里提供的另一个答案也同样有效!

相关内容

  • 没有找到相关文章

最新更新