考虑并举例如下:
public class LoggerTestClass {
private static final Logger LOGGER = Logger.getLogger(LoggerTestClass.class);
}在上面的例子中,传递给getLogger方法的参数是硬编码的,也就是现在的LoggerTestClass.class,每次我更改类名时,我都必须更改getLogger方法的参数。
任何其他自动获取类名的方法,例如,对于非静态变量,我们可以添加this.getClass()
发布于 2019-07-05 14:12:22
发布于 2019-07-05 17:05:10
兄弟,对于这个问题,首先,我们需要弄清楚一些概念。
在java中,如果一个标识符是一个类的成员,并且由'static‘关键字修饰,那么它的值是在编译阶段决定的。
如果添加了‘declared.and’关键字,则标识符是常量,它的值必须有一个初始值,该值在java运行时中不能更改。
有趣的是,静态常量只在类内部声明,它可以称为'Classname‘+ '.’,但与类上下文无关。如果没有上下文,标识符不会变成动态的。
我认为如果让标识符变成动态的,只有两种方法:
类测试{私有静态记录器记录器;公共测试(){记录器= Logger.getLogger(getClass().getSimpleName());}}
如果你不想让其他类访问it.
中的类。
快乐的代码~
欢迎您的光临~
发布于 2019-07-05 19:23:23
你能使用java 9+吗?那么解决方案很简单:
private static final Logger LOGGER = Logger.getLogger(MethodHandles.lookup().lookupClass());因为MethodHandles.lookup()使用caller类创建查找。(通过Reflection.getCallerClass(),但Reflection是内部API,因此您需要额外的方法句柄查找步骤)
https://stackoverflow.com/questions/56897382
复制相似问题