我写了一个有很多 getter 的 java 类。现在我想获取所有 getter 方法并在某个时候调用它们。我知道有诸如 getMethods() 或 getMethod(String name, Class… parameterTypes) 之类的方法,但是我确实只是想获得吸气剂…,使用正则表达式?谁能告诉我?谢谢!
原文由 user996505 发布,翻译遵循 CC BY-SA 4.0 许可协议
我写了一个有很多 getter 的 java 类。现在我想获取所有 getter 方法并在某个时候调用它们。我知道有诸如 getMethods() 或 getMethod(String name, Class… parameterTypes) 之类的方法,但是我确实只是想获得吸气剂…,使用正则表达式?谁能告诉我?谢谢!
原文由 user996505 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以为此使用 反射 框架
import org.reflections.ReflectionUtils.*;
Set<Method> getters = ReflectionUtils.getAllMethods(someClass,
ReflectionUtils.withModifier(Modifier.PUBLIC), ReflectionUtils.withPrefix("get"));
原文由 Naveedur Rahman 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
不要使用正则表达式,使用
Introspector
:通常你不需要 Object.class 的属性,所以你会使用带有两个参数的方法:
顺便说一句:有些框架可以为您做到这一点,并为您呈现一个高级视图。例如 commons/beanutils 有方法
( 这里的文档)就是这样做的:找到并执行所有的 getter 并将结果存储在地图中。不幸的是,
BeanUtils.describe()
在返回之前将所有属性值转换为字符串。卧槽谢谢@danw更新:
这是一个基于对象的 bean 属性返回
Map<String, Object>
的 Java 8 方法。不过,您可能希望使错误处理更加健壮。对样板感到抱歉,已检查的异常阻止我们在这里充分发挥作用。
原来 Collectors.toMap() 讨厌空值。下面是上述代码的命令式版本:
下面是使用 JavaSlang 以更简洁的方式实现的相同功能:
这是一个 Guava 版本: