Java "self" (статическая) ссылка - PullRequest
9 голосов
/ 11 марта 2011

Я ищу ссылку "self" на текущий класс в JAVA в статическом контексте, как в Оператор разрешения области действия PHP ?

Решение: вырваться за рамки? ВНИМАНИЕ, это сравнивается со статическим определением действительно медленно (в 300 раз):

static Logger LOG = LoggerFactory.getLogger(new RuntimeException().getStackTrace()[0].getClassName());

Старомодный способ будет:

static Logger LOG = LoggerFactory.getLogger(<Classname>.class.getName());

Есть ли альтернативы? Я ищу способ поместить определение регистратора в абстрактный класс. Регистратор должен сам определить класс, из которого он вызывается.

Ответы [ 4 ]

13 голосов
/ 11 марта 2011

Немного быстрее

static final Logger LOG = LoggerFactory.getLogger(
       Thread.currentThread().getStackTrace()[0].getClassName());

Если вы сделаете это 1000 раз, это займет 36 мс с использованием Class.class.getName () и 60 мс, сделав это таким образом.Возможно, не стоит беспокоиться о слишком много.;)

4 голосов
/ 11 марта 2011

Вы не должны наследовать регистратор. Просто объявите регистратор в каждом классе.

Но если вы не хотите делать такие полезные мысли, просто не делайте это статичным)

0 голосов
/ 26 февраля 2019

Вам не нужно использовать ни один из них.То, что я нахожу удобным в использовании:
// Logger

приватный статический финал Logger logger = LoggerFactory.getLogger (CreateEmployeeRecord.class или this.class);

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

0 голосов
/ 11 марта 2011

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

Вы можете создать вспомогательный метод следующим образом:

public static String getCallingClassname() {
    return new RuntimeException().getStackTrace()[1].getClassName();
}

, а затем

static Logger LOG = LoggerFactory.getLogger(Helper.getCallingClassname());

но это так же дорого, как оригинальная версия. .

Мое личное предпочтение - "старомодный" способ сделать это.

...