0

更新- 原始问题并不模棱两可,并导致抽象讨论。

澄清正在更新中。

我有immutable.HashMap[Manifest[_], _]它是由类加载器 A 中的第 3 方库生成的。

  • Manifest[MyClassX]包含共享类的键将在通过类加载器边界hashCode时保留他的。HashMap
  • Manifest[MyClassY]包含来自不同类加载器的类的键将变得不可用。

Manifest[MyClassY]内部类加载器AManifest[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与来源进行比较。

是否有任何其他可能实现相同的目标?

我绑定到外部库的清单。

4

0 回答 0