Java 中的 ClassValue 7

2022-09-01 00:12:15

在浏览Java 7 API文档时,我偶然发现了新的java.lang.ClassValue类,其中包含以下相当少的文档:

懒惰地将计算值与(可能)每个类型相关联。例如,如果一种动态语言需要为在消息发送调用站点遇到的每个类构造一个消息调度表,那么它可以使用一个来缓存快速执行消息发送所需的信息,对于遇到的每个类。ClassValue

任何人都可以更好地解释这个类解决了什么问题,也许还有一些已经使用这个类的示例代码或开源项目?

更新:我仍然对使用此新类的一些实际源代码或示例感兴趣。

我还在mlvm-dev邮件列表中发现了这封关于一些实现改进的邮件。它显然从使用WeakHashMap更改为java.lang.Class上的新私有字段,以使其更具可扩展性。


答案 1

对这个类的目的的最好解释是它解决了Java Bug 6389107

在很多用例中,由于某种原因,人们希望基本上拥有一个,但这会导致各种各样的麻烦,因为在Map之前,对象将无法GC。 不能解决问题,因为经常引用类。Map<Class<?>, T>ClassWeakHashMap<Class<?>, T>T

上面的 bug 提供了更详细的解释,并包含面临此问题的示例项目/代码。

类值是这个问题的答案。一种线程安全的类装入器装入/卸载将数据与类相关联的安全方法。


答案 2

其目的是允许将运行时信息添加到任意目标类(引用)。

我认为它更针对动态语言程序员。我不确定它对一般应用程序开发人员有什么用处。

最初,该类存在于包中。这个错误表明它移动到java.lang。java.dyn


推荐