经过一番考虑,我在我的应用程序中实现了缓存,基本上,使用包含 Class
作为键的哈希表(它是对应于特定缓存实体并继承自抽象 的类code>AbstractCache
) 以及由该类创建的具体缓存对象,这看起来很方便。
但是将 Class
作为 Hashtable 键是个好主意,还是我应该只使用 .canonicalName()
或类似的东西?
最佳答案
如果您永远不需要卸载类,这可能不是问题。但由于要求可能会根据代码的运行方式(独立 Java 应用程序或部署在 Web 容器、企业服务器等)而有所不同,因此最好不要这样做。类加载器泄漏是非常难以追踪和解决的错误。
使用规范名称似乎是一个更好的解决方案。但是请记住另一个挑战:如果您有多个类加载器可能加载同一个类,这些类仍将被视为不兼容。您将无法通过它们的规范名称来区分它们,而由不同的类加载器加载的两个相同的类将产生两个不同的 Class
实例,并且可以用作同一映射中的键。
如果您没有非常具体的类加载器约束或要求,请使用规范名称。如果您要部署为独立 Java 应用程序以外的任何其他应用程序,请注意其影响。
关于java - Class as Hashtable 键——这是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8209658/