我使用反射来动态获取类信息,特别是方法定义。以下是我将要获得的方法定义的一些示例
"public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException"
...
"public final native java.lang.Class<?> java.lang.Object.getClass()"
正如您所看到的,它们都是唯一的,有些具有异常,参数等。解析每个字符串并获取方法名称的最佳方法是什么?
我的想法是,我可以找到角色(
,然后回溯到第一个空格,将该空格中的新字符串保存到(
字符。
我是否会遇到此解决方案的问题,或者是否有更简单更优雅的方式来实现我想要的目标?
更新
每个方法声明都包含在一个单独的字符串中。这是一个字符串问题而不是反射问题,我只提到反射,所以你知道我是如何动态获取这些信息的。我需要做的就是解析方法名称的字符串。
答案 0 :(得分:1)
带括号的解决方案是可以的(如果你真的得到String
,而不是java.lang.reflect.Method
),我建议使用正则表达式编写代码:
Pattern p = Pattern.compile("([^.]*)\\s*\\(");
Matcher m = p.match(str);
if (m.find()) {
String methodName = m.group(1);
//...
}
顺便说一下,我不明白你为什么要解析String
:你从哪里得到它?
获得反射方法的最常用方法是:
Class<?> clazz = ...
Method[] methods = clazz.getMethods();
// processing methods
for (Method method : methods) {
// processing concrete method
// for example, getting the name
String name = method.getName();
}