首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类的私有静态最终变量中使用动态类名

在类的私有静态最终变量中使用动态类名
EN

Stack Overflow用户
提问于 2019-07-05 14:10:37
回答 3查看 369关注 0票数 0

考虑并举例如下:

代码语言:javascript
复制
public class LoggerTestClass {
    private static final Logger LOGGER = Logger.getLogger(LoggerTestClass.class);
}

在上面的例子中,传递给getLogger方法的参数是硬编码的,也就是现在的LoggerTestClass.class,每次我更改类名时,我都必须更改getLogger方法的参数。

任何其他自动获取类名的方法,例如,对于非静态变量,我们可以添加this.getClass()

EN

回答 3

Stack Overflow用户

发布于 2019-07-05 14:12:22

您可以使用Lombok以一种干净的方式实现它。您所需要做的就是将@Log放在您的类的顶部,它将为您提供一个要使用的log对象。阅读更多here

票数 1
EN

Stack Overflow用户

发布于 2019-07-05 17:05:10

兄弟,对于这个问题,首先,我们需要弄清楚一些概念。

在java中,如果一个标识符是一个类的成员,并且由'static‘关键字修饰,那么它的值是在编译阶段决定的。

如果添加了‘declared.and’关键字,则标识符是常量,它的值必须有一个初始值,该值在java运行时中不能更改。

有趣的是,静态常量只在类内部声明,它可以称为'Classname‘+ '.’,但与类上下文无关。如果没有上下文,标识符不会变成动态的。

我认为如果让标识符变成动态的,只有两种方法:

  1. 让标识符成为variable.remove‘最终’关键word.the代码如下所示:

类测试{私有静态记录器记录器;公共测试(){记录器= Logger.getLogger(getClass().getSimpleName());}}

如果你不想让其他类访问it.

  • Try这个java动态代理,'private‘关键字就足够了。它可以改变java runtime.

中的类。

快乐的代码~

欢迎您的光临~

票数 0
EN

Stack Overflow用户

发布于 2019-07-05 19:23:23

你能使用java 9+吗?那么解决方案很简单:

代码语言:javascript
复制
private static final Logger LOGGER = Logger.getLogger(MethodHandles.lookup().lookupClass());

因为MethodHandles.lookup()使用caller类创建查找。(通过Reflection.getCallerClass(),但Reflection是内部API,因此您需要额外的方法句柄查找步骤)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56897382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档