2

私はフォローしようとしています

コンテキスト ctx = (コンテキスト) jndiCntx.lookup(fSTANDARD_ENVIRONMENT);

オブジェクト obj = ctx.lookup(fSTANDARD_JNDINAME);

そして、次のコードは私にfalseを返しています

MyClass.class.isAssignableFrom(obj.getClass())

でも

MyClass.class.getName().equalsIgnoreCase(obj.getClass().getName()) は true を返します。

ClassCastException をスローするため、obj を MyClass にキャストできません。

問題は何ですか?

4

2 に答える 2

2

私の推測では、クラスは 2 つの異なるクラスローダーによってロードされたものです。

現在のコードでobj.getClass().getClassLoader()vs 呼び出しを見てください。getClassLoader()

クラス自体は 2 つの異なる jar ファイルから利用できますか? これは通常、簡単に整理できます。両方とも同じ jar ファイルを使用する 2 つの別個のクラスローダーがある場合は、さらに困難になります。

どのコンテナで実行していますか?クラスローダーのコンテナー固有のドキュメントを参照することをお勧めします...たとえば、ここにTomcat 5.5 ClassLoader のハウツーがあります。

于 2009-10-28T07:53:55.580 に答える
0

ちょっと待ってください、なぜあなたは単なる「等しい」ではなく、クラス名をチェックするために「equalsIgnoreCase」を呼んでいるのですか?(ほぼ)一致する名前の間に競合がある可能性はありますか?

于 2009-11-18T18:13:01.303 に答える