アプリ版:「スタンプのみでお礼する」機能のリリースについて

言語:JAVA

生成したインスタンスを削除するにはどのようにすれば良いでしょうか?

testData = new TestData();

testDataはセッション内に格納してあります。
また、testDataはNULLのままだったり、実際に値が入っていたりもします。

NULLのままだと不具合があるため、NULLの場合は、インスタンスそのものを削除してしまいたいと考えています。
初歩的な質問ですみませんが、教えてください。

よろしくお願いいたします。

A 回答 (3件)

浅学なため、TestDataというクラス名と「セッション内に格納」という表現だけからどうしてHttpSessionが出てくるのか分かりませんが...



Javaでは、明示的な操作(C++のdeleteのような)によってインスタンスを削除することはできません。そのインスタンスがどこからも参照されなくなったらGCで消えます。もう要らない(消えてほしい)インスタンスを参照している変数やフィールドにはnullを代入することで参照をなくします。

testData = null;

> NULLのままだと不具合があるため、NULLの場合は、インスタンスそのものを削除してしまいたい

何がNULLだとどのように不都合なのかを説明してもらえると、別の回答がつくかもしれません。
    • good
    • 1
この回答へのお礼

Weblogic環境でWorkshopを使っていて開発を行ってます。

testData内の値をJSP上のタグ(WebLogic特有のもの?)を使って、入力フィールドのデフォルト値として設定しています。
その際に、インスタンスが存在しない場合は自動的に作られるので問題ないのですが、そのインスタンスがNULLだとエラーが発生してしまうようです。

・JSPの中でNULLかどうかチェックしてから処理をする
・そのインスタンスの各項目に、NULLでなく""を入れる
などを行えば回避できるのですが、ちょっと手間ということ、DELETEのようなことが出来るのでは…?? と思い、確認させていただきました。

出来ないとのこと、承知いたしました。
ご回答ありがとうございました。

お礼日時:2010/02/05 14:26

> そのインスタンスがNULLだとエラーが発生してしまうようです。



「インスタンス」という言葉で表しているものが違うんだと思うのですが、インスタンスはクラスを実体化したものなので、インスタンスがnullになることはありません。変数とか、インスタンスの中のフィールドの値がnullになることはありますけど。

また、大文字のNULLにこだわっておられるところがJavaっぽくないなと思います。WebLogicでは大文字のNULLに特別な意味があるのでしょうか?

> インスタンスが存在しない場合は自動的に作られるので問題ないのですが、

問題が発生する場合には、問題のあるインスタンスがどこかから参照されているのですよね? その参照をなくしてしまえば(nullを代入してしまえば)、問題を起こすインスタンスは存在しないのと同じことになるので、適切なインスタンスが自動的に作られるのでは?
逆に、C++のdeleteのような機能があったとしても、どこかからまだ参照されているままのインスタンスをdeleteしたら誤動作の原因になります。結局はその参照を消さなくてはいけないので、明示的なdelete操作が要らない分だけJavaのほうが簡単です。
    • good
    • 1

>testDataはセッション内に格納してあります。


セッションにあるものを開放したいのですか?

もしそうなら以下のメソッドで開放することが出来ます。
HttpSession#removeAttribute
    • good
    • 1
この回答へのお礼

ご回答、ありがとうございます。
セッション内のものは削除できました。

セッションに格納する前、例えば、
testData = new TestData();

で初期化した直後に、testDataを削除したい場合は
どのように行えばよいでしょうか?

よろしくお願いいたします。

お礼日時:2010/02/04 13:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています