更新- 原始问题并不模棱两可,并导致抽象讨论。
澄清正在更新中。
我有immutable.HashMap[Manifest[_], _]
它是由类加载器 A 中的第 3 方库生成的。
Manifest[MyClassX]
包含共享类的键将在通过类加载器边界hashCode
时保留他的。HashMap
Manifest[MyClassY]
包含来自不同类加载器的类的键将变得不可用。
Manifest[MyClassY]
内部类加载器A和Manifest[MyClassY]
内部类加载器B具有不同的hashCode
值。
我想知道 Scala 反射库是否能够Manifest[_]
从类加载器A内的类加载器B重新创建?
供参考。之后,我将比较原始清单和新清单。
如果 hashCode 相同,则 我们有来自共享来源的 `Manifest[MyClass]` 和 `MyClass`。 别的 我们有 Manifest[MyClass] 和来自不同来源的 MyClass。
我需要通过这个约束来检测和分离 HashMap 的键。
原创。
我有 OSGi 环境,并且我有带有哈希码123的清单m和bundle A。我想检查这个清单对于 bundle B中的可用类是否“相同” 。
如果我将清单传递给捆绑B,那么:
- 如果在我将使用反射重新创建清单m'之后,捆绑包具有清单类的通用类加载器,则它必须具有相同的哈希码123
- 如果捆绑包具有不同的类加载器,那么我将拥有带有哈希码987的清单m' ,即使清单类名相同。如果类由不同的类加载器加载,则相同类的哈希码是不同的。
有没有办法通过反射重新创建清单?我不想处理所有可能的清单字段,调用每个字段,Class.forName(...)
然后hashCode
与来源进行比较。
是否有任何其他可能实现相同的目标?
我绑定到外部库的清单。