如何通过反射找出方法的可见性?

绿头鸭

内容:

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

为了测试“不变性不变”(您能说吗?),我想我只是通过反射调用类中的所有公共方法,然后检查该类之后是否没有更改。这样一来,我以后就不太可能不小心破坏不变式。这本身可能是可行的,也可能是无效的,但我认为这对我来说也是一种反思。

策略:

  • 用途getMethods()

使用getMethods(),我仅获得公共接口,但是当然这也包括所有继承的方法。然后的问题是,诸如wait()和notify()之类的方法会导致InvocationTargetExceptions,因为我还没有同步等等。

  • 用途getDeclaredMethods()

(天真吗?)假设只有我声明的方法才能够打破类的不变性,所以我尝试使用getDeclaredMethods()代替方法。不幸的是,这将调用在类中声明的所有方法(私有和公共方法),而不是父类。私有方法显然是不相关的,因为它们允许打破不变性。

题:

所以我的问题是,如何确定通过via获得的方法是否getDeclaredMethods()是公共的,以便可以通过反射来调用它?浏览文档时,什么都没跳出来。

我可以看到解决此问题的其他方法,例如专门忽略诸如wait()等的方法,但这似乎比我能处理的还要骇客。

邓肯·琼斯

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

例如

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法通过界面了解方法的可见性

来自分类Dev

如何通过setVisible()方法wicket ajax在方法中更改模型的可见性

来自分类Dev

Android:如何通过DataBinding绑定ProgressBar可见性?

来自分类Dev

如何通过Intellij代码生成器更改设置方法的可见性?

来自分类Dev

如何更改实例方法的可见性

来自分类Dev

反射-方法:: getGenericReturnType没有泛型-可见性

来自分类Dev

云端点方法可见性

来自分类Dev

如何覆盖标签可见性?

来自分类Dev

通过g ++中不同名称空间的c ++方法可见性继承

来自分类Dev

如何通过测试角度指令检查元素的可见性?

来自分类Dev

如何通过单击按钮切换div的可见性

来自分类Dev

休息Api以获得产品如何通过过滤器的“状态”和“可见性”

来自分类Dev

如何通过数据绑定更新布局元素的可见性

来自分类Dev

如何通过单击按钮在 openlayers 3 中切换 geojson 层的可见性?

来自分类Dev

如何通过 webview 当前 url 设置按钮可见性

来自分类Dev

通过绑定设置可见性-dimens.xml

来自分类Dev

通过指令更新HTML元素的可见性

来自分类Dev

通过特定的程序集限制类的可见性

来自分类Dev

无法通过DataTemplates设置控件的可见性

来自分类Dev

TextBlock可见性通过按钮悬停更改WPF

来自分类Dev

通过 Firebase 实时控制标记可见性

来自分类Dev

ProgressBar的可见性

来自分类Dev

JPanel可见性

来自分类Dev

对象可见性

来自分类Dev

ProgressBar的可见性

来自分类Dev

分区可见性

来自分类Dev

JPanel可见性

来自分类Dev

SSRS可见性

来自分类Dev

抽屉可见性