Java “self” (static) reference

前端 未结 4 1190
感动是毒
感动是毒 2021-02-20 14:04

I am looking for a \"self\" reference to the current class in JAVA in a static context manner like in PHP Scope Resolution Operator?

Solution: Break out of scope? BEWARE

相关标签:
4条回答
  • 2021-02-20 14:17

    You should not inherit logger. Just declare logger in each class.

    But if you don't want do such useful think, just don't make it static)

    0 讨论(0)
  • 2021-02-20 14:30

    The slightly faster

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

    If you do this 1000 times it will take 36 ms using Class.class.getName() and 60 ms doing it this way. Perhaps its not worth worrying about too much. ;)

    0 讨论(0)
  • 2021-02-20 14:31

    You don't need to use any of those. What I find convenient to use is:
    //Logger

    private static final Logger logger = LoggerFactory.getLogger(CreateEmployeeRecord.class or this.class);

    Do it in every class that needs logging, and change class name in bracket to corresponding class wherever it's being used.

    0 讨论(0)
  • 2021-02-20 14:34

    I don't think there are any alternatives that are significantly different to the two in your question.

    You could create a helper method like this:

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

    and then

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

    but that's as expensive as the original version. (FWIW - 300 times as slow is probably not a major concern, unless you have thousands of these loggers. Each of these statics is initialized just once ...)

    My personal preference is for the "old fashioned" way of doing it.

    0 讨论(0)
提交回复
热议问题