Извлечение полностью quallified имени класса из объекта java.lang.reflect.Method с или без Regex - PullRequest
0 голосов
/ 21 сентября 2010

Я пишу метод, который должен извлекать полное имя класса из java.lang.reflect.Method -объекта. Поскольку я не смог найти удобный метод для получения имени класса объекта-метода, я пытаюсь извлечь его с помощью следующего выражения 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;
}

К сожалению, Regex, который я построил, не работает правильно, так как он дает мне две группы результатов, но он должен давать мне только одну группу. Когда я вызываю метод с методом

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

поэтому метод возвращает первую группу". Я не хочу выбирать группу вручную, но мне нужно регулярное выражение, которое уже должно дать мне одну подходящую группу. Что не так с моим регулярным выражением?

1 Ответ

2 голосов
/ 21 сентября 2010
String methodName = method.getDeclaringClass().getName() 

если вы настаиваете на использовании регулярных выражений, вот исправление:

while (m.find()) {
    result = m.group(1);

    System.out.println(result);
}

group() или group(0) ВСЕГДА возвращает всю совпадающую строку.Вам нужно group(n), где n > 0, чтобы получить значение в скобках.

Однако я бы предположил, что вы не используете регулярное выражение для этого случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...