解析方法名称的字符串中的方法定义

时间:2014-07-24 14:36:39

标签: java string

我使用反射来动态获取类信息,特别是方法定义。以下是我将要获得的方法定义的一些示例

    "public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException"
    ...
    "public final native java.lang.Class<?> java.lang.Object.getClass()"

正如您所看到的,它们都是唯一的,有些具有异常,参数等。解析每个字符串并获取方法名称的最佳方法是什么?

我的想法是,我可以找到角色(,然后回溯到第一个空格,将该空格中的新字符串保存到(字符。

我是否会遇到此解决方案的问题,或者是否有更简单更优雅的方式来实现我想要的目标?

更新

每个方法声明都包含在一个单独的字符串中。这是一个字符串问题而不是反射问题,我只提到反射,所以你知道我是如何动态获取这些信息的。我需要做的就是解析方法名称的字符串。

1 个答案:

答案 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();
}