经过一番考虑后,我在我的应用程序中实现了缓存,基本上,使用包含Class
的哈希表作为键(这是与特定缓存实体对应的类,并从摘要{{1}继承和)从该类生成的具体缓存对象,这看起来非常方便。
但是将AbstractCache
作为Hashtable键是一个好主意,还是应该只使用Class
或类似的东西?
答案 0 :(得分:3)
如果你永远不需要卸载课程,那可能不是问题。但是,由于需求可能会根据代码的运行方式(独立的Java应用程序或部署在Web容器,企业服务器等中)而有所不同,因此不这样做可能更明智。 Classloader泄漏是追踪和解决的非常棘手的错误。
使用规范名称似乎是一个更好的解决方案。但请记住另一个挑战:如果您有多个可能加载相同类的类加载器,那么这些类仍将被视为不兼容。您将无法通过其规范名称区分它们,而由不同类加载器加载的两个相同的类将产生两个不同的Class
实例,并且可以在同一个映射中用作键。
如果您没有非常具体的类加载器约束或要求,请使用规范名称。如果您将其部署为独立Java应用程序以外的其他任何内容,请不要担心其含义。
答案 1 :(得分:2)
听起来不错。我过去做过这个。课程实际上是不可变的单身人士,所以没有机会使用"错误的"一个类的实例。
唯一有问题的是,如果涉及多个ClassLoader,但在大多数应用中这种情况很少见。