代码之家  ›  专栏  ›  技术社区  ›  Wolkenarchitekt

从java.lang.reflect文件.Method对象(带或不带Regex)

  •  0
  • Wolkenarchitekt  · 技术社区  · 14 年前

    我正在编写一个方法,它应该从 -对象。由于找不到任何方便的方法来获取方法对象的类名,因此我尝试使用以下Regex表达式来提取它:

    ([A-Za-z.]*)[\(]
    

    (也许还有一种没有正则表达式的方法?)。

    public String getFullClassName(Method method) {
      // Example methodname:
      // public void com.test.user.impl.UserServiceImpl.deleteUser(java.lang.Long) throws com.test.user.api.exception.UserServiceException
      String methodName = method.toString();
      Pattern p = Pattern.compile("([A-Za-z.]*)[\\(]");
      Matcher m = p.matcher(methodName);
      String result = "";
      while (m.find()) {
          result = m.group();
      }
      return result;
    }
    

    public void com.test.user.impl.UserServiceImpl.deleteUser(java.lang.Long) throws com.test.user.api.exception.UserServiceException
    

    ,我得到两个匹配的组:

    Group(0) = com.test.user.impl.UserServiceImpl.deleteUser(
    Group(1) = com.testuser.impl.UserServiceImpl.deleteUser
    

    因此该方法返回第一组“ com.test.user用户.impl.userserviceinpl.deleteUser( ,但应该是 ". 我不想手动选择组,但我想要一个正则表达式,它应该已经给我一个匹配的组。我的正则表达式怎么了?

    1 回复  |  直到 14 年前
        1
  •  2
  •   nanda    14 年前
    String methodName = method.getDeclaringClass().getName() 
    

    如果您坚持使用regex,下面是解决方法:

    while (m.find()) {
        result = m.group(1);
    
        System.out.println(result);
    }
    

    group() group(0) 总是返回整个匹配的字符串。你需要 group(n) n > 0 获取括号内的值。

    不过,我建议您不要在这个案例中使用regex。