Class.getName() 的静态调用
Posted
技术标签:
【中文标题】Class.getName() 的静态调用【英文标题】:static invocation of Class.getName() 【发布时间】:2018-10-24 20:57:21 【问题描述】:我在NestedRuntimeException
中的org.springframework.core
中偶然发现了以下代码:
static
NestedExceptionUtils.class.getName();
有这样的块有什么用?
【问题讨论】:
我猜这是强制JVM类加载器加载类NestedExceptionUtils
的技巧。但也许还有其他特定于 Spring 的原因。
我想知道为什么会有这样的一行没有评论,所以我查了源。当然,在该声明之前有一条评论几乎可以解释它,它只是不包含在问题中:“在调用 getMessage() 时,急切地加载 NestedExceptionUtils 类以避免 OSGi 上的类加载器死锁问题。由 Don Brown 报告;SPR- 5607"
【参考方案1】:
它将eagerly
加载NestedExceptionUtils
类以避免类加载器死锁。报告了一个错误 (SPR-5607)“Non-trivial NestedRuntimeException.getMessage() 可能导致 OSGi 死锁”,这是同一问题的解决方案。
已编辑:
它也在源代码中作为注释提到。如需完整的源代码文档,请关注link。这里是NestedRuntimeException
类的部分源码。
static
// Eagerly load the NestedExceptionUtils class to avoid classloader deadlock
// issues on OSGi when calling getMessage(). Reported by Don Brown; SPR-5607.
NestedExceptionUtils.class.getName();
【讨论】:
感谢分享链接! 他们真的应该为此添加评论。 @Bergi 在问题中引用的行之前有一条评论 @Bergi 源码中有注释说明原因。我也编辑并添加了这些细节。谢谢!!!以上是关于Class.getName() 的静态调用的主要内容,如果未能解决你的问题,请参考以下文章