0

更新- 元の質問はあいまいではなく、抽象的な議論につながります。

明確化は更新中です。

immutable.HashMap[Manifest[_], _]クラスローダーA内のサードパーティライブラリによって生成されたものがあります。

  • Manifest[MyClassX]共有クラスを含むキーは、クラス ローダーの境界を通過したhashCodeときにそのキーを保持します。HashMap
  • Manifest[MyClassY]異なるクラス ローダーのクラスを含むキーは使用できなくなります。

Manifest[MyClassY]クラスローダA内とManifest[MyClassY]クラスローダB内では値が異なりhashCodeます。

Manifest[_]Scala リフレクション ライブラリには、クラス ローダーA内でクラス ローダーBから再作成する機能があることを知りたいですか?

ご参考までに。その後、元のマニフェストと新しいマニフェストを比較します。

hashCode が同じ場合
  共有オリジンからの MyClass を持つ Manifest[MyClass] があります。
そうしないと
  異なるオリジンの MyClass を持つ Manifest[MyClass] があります。

この制約により、HashMap のキーを検出して分離する必要があります。


オリジナル

OSGi環境があり、マニフェストmとハッシュコード123 withing bundle A があります。このマニフェストがバンドルBで利用可能なクラスと「同じ」かどうかを確認したいと思います。

マニフェストをバンドルBに渡すと、次のようになります。

  • リフレクションを使用してマニフェストm'を再作成した後、バンドルにマニフェスト クラスの共通クラス ローダーがある場合は、同じハッシュ コード123が必要です。
  • バンドルに異なるクラス ローダーがある場合、マニフェスト クラス名が同じであっても、ハッシュ コード987のマニフェストm'が作成されます。クラスが異なるクラスローダーによってロードされた場合、同じクラスのハッシュコードは異なります。

リフレクションによってマニフェストを再作成する方法はありますか? 可能なすべてのマニフェスト フィールドを処理し、それぞれを呼び出してから、originClass.forName(...)と比較したくありません。hashCode

同じ目標を達成する他の可能性はありますか?

外部ライブラリによってマニフェストにバインドしました。

4

0 に答える 0