为什么Class.getSimpleName()没有缓存?

bil*_*.cn 15 java

如果你看一下Sun的实现的源代码Class.getSimpleName(),你会发现它似乎每次调用它时都会返回一个新的String实例.但是,Class类中的许多其他功能都是缓存的.

由于简单的名称计算似乎并不容易,并且JavaDoc中没有任何内容表明它必须每次返回一个新实例,因此它应该是缓存的一个很好的候选者.我想知道为什么这个没有缓存有任何设计原因?

我问,因为许多框架一直使用简单的名称,这是一个很容易缓存的东西.

Bas*_*que 7

更新:名称缓存在 OpenJDK 11 中

在 OpenJDK 11 及更高版本中,类名缓存。请参阅 OpenJDK 源代码Class.java并搜索private ReflectionData<T> reflectionData()从该getSimpleName方法调用的方法。

有关详细信息,请参阅票证JDK-8187123