- - PR -
Servlet上でのClass#forName()について
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-09-07 22:47
こんにちは。濃縮トマトと申します。
Class#forName()で取得したClassオブジェクトが、 Servlet上とそうでない場合で結果が違っていました。 実際、行っている処理は、あるクラスのClassオブジェクトを Class#forName()で取得して、次にそのクラスのインスタンスを生成して、 Class#isInstance()をしているだけです。 上記の処理を行った場合に、Servlet上ではfalseで そうでない場合は、trueになるのです。 デバックしてみたところ、インスタンスを生成したときにServlet上では、 Classオブジェクトの変数に値が入っていないのに対し、 Servletを使用しない場合は、Classオブジェクトの変数に値が入っていました。 その違いは発見したのですが、なぜそうなるのかがわかりません。 理由を知っている方がいらっしゃいましたら、 ぜひご教授をお願いします。 以上、よろしくお願いします。 | ||||
|
投稿日時: 2004-09-08 00:10
んーなんでしょうね。
スレッドのコンテクストクラスローダが違うことに起因しているかもしれません。 | ||||
|
投稿日時: 2004-09-08 01:51
なんか矛盾してますよ。
「Classオブジェクトの変数に値が入っていない」とはどういう状態ですか? 単にクラスが見つからなくてClass#forName()に失敗しているだけではないですか? 自分で、どこかで、大切な例外を握り潰していませんか? Class cls; で、clsがnullなら、「cls.isInstance(Object)」はtrueもfalseも返さず、 例外NullPointerExceptionが発生するはずです。 clsがnullなら、別のnullでないClass変数.isInstance(cls)は当然falseを返します。 | ||||
1
