- PR -

Servlet上でのClass#forName()について

1
投稿者投稿内容
濃縮トマト
会議室デビュー日: 2004/06/03
投稿数: 2
投稿日時: 2004-09-07 22:47
こんにちは。濃縮トマトと申します。

Class#forName()で取得したClassオブジェクトが、
Servlet上とそうでない場合で結果が違っていました。

実際、行っている処理は、あるクラスのClassオブジェクトを
Class#forName()で取得して、次にそのクラスのインスタンスを生成して、
Class#isInstance()をしているだけです。

上記の処理を行った場合に、Servlet上ではfalseで
そうでない場合は、trueになるのです。

デバックしてみたところ、インスタンスを生成したときにServlet上では、
Classオブジェクトの変数に値が入っていないのに対し、
Servletを使用しない場合は、Classオブジェクトの変数に値が入っていました。

その違いは発見したのですが、なぜそうなるのかがわかりません。

理由を知っている方がいらっしゃいましたら、
ぜひご教授をお願いします。

以上、よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-09-08 00:10
んーなんでしょうね。
スレッドのコンテクストクラスローダが違うことに起因しているかもしれません。
kito
ベテラン
会議室デビュー日: 2003/03/24
投稿数: 59
お住まい・勤務地: Osaka
投稿日時: 2004-09-08 01:51
なんか矛盾してますよ。

引用:

濃縮トマトさんの書き込み (2004-09-07 22:47) より:

デバックしてみたところ、インスタンスを生成したときにServlet上では、
Classオブジェクトの変数に値が入っていないのに対し、
Servletを使用しない場合は、Classオブジェクトの変数に値が入っていました。



「Classオブジェクトの変数に値が入っていない」とはどういう状態ですか?
単にクラスが見つからなくてClass#forName()に失敗しているだけではないですか?
自分で、どこかで、大切な例外を握り潰していませんか?

Class cls;
で、clsがnullなら、「cls.isInstance(Object)」はtrueもfalseも返さず、
例外NullPointerExceptionが発生するはずです。
clsがnullなら、別のnullでないClass変数.isInstance(cls)は当然falseを返します。
1

スキルアップ/キャリアアップ(JOB@IT)