Как метод Java может получить объект метода, относящийся к этому конкретному методу? (Джава) - PullRequest
0 голосов
/ 06 декабря 2010

Я пишу метод Java со следующей подписью.

void Logger (Метод метода, Object [] args);

Если метод (например, ABC ()) вызывает этот метод Logger, он должен извлечь объект Method, который инкапсулирует данные о себе (ABC ()), и передать его в качестве аргумента.

Как метод может получить объект Method, в котором хранится вся информация об этом методе?

Простой способ - я использую Method [] method = ExampleClass.Class.getMethods (); и найдите во всем массиве метод с правильным именем. (Что довольно неэффективно). Кроме того, если два или более методов имеют одинаковые имена, мне придется также извлекать их типы параметров (чтобы различать их) и иметь разные коды для каждого метода. Это было бы неэффективно и болезненно.

Есть ли лучший способ?

Спасибо за помощь.

Ответы [ 3 ]

5 голосов
/ 06 декабря 2010

Не делай этого.Скорее получите имя метода из стека.

public void log(Object object) {
    String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
    // ...
}

Это, однако, довольно дорого, и поэтому большинство уважаемых платформ журналирования предлагает опцию включения / выключения (которую я бы рекомендовал использовать вместодоморощенный).

1 голос
/ 06 декабря 2010

Еще лучше, не используйте этот метод вообще.Используйте logback или какую-либо другую современную структуру ведения журнала.

0 голосов
/ 06 декабря 2010

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

Например, вы можете прочитать из документации log4j, что это извлечение (как предполагает другой ответ) выполняется из трассировки стека и является дорогим:

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