2016-06-01 85 views
4

Object型を返すセッションオブジェクトから値を読み取ろうとしています。 私はオブジェクトがtrue/falseの値を持っていることを知っています。 その値をbooleanタイプに変換したいと思います。だから私は次のコードを持っています。Javaの.toString()と(String)キャストの違い

session.getAttribute("MyKeyValue"); // It returns Object type 

以下は例外をスローします。

boolean myBoolVal = Boolean.parseBoolean((String) session.getAttribute("MyKeyValue")); 

以下は正しく動作します。

boolean myBoolVal = Boolean.parseBoolean(session.getAttribute("MyKeyValue").toString()); 

実際、オプション1が機能しない理由は分かりませんが、

+0

これは、あまりにも、interstのかもしれません。http://stackoverflow.com/質問/ 328661/explicit-vs-implic-to-tostring – GhostCat

+0

session.getAttribute( "MyKeyValue")。getClass()の値は何ですか? – yelliver

答えて

8

session.getAttribute("MyKeyValue")によって返されたインスタンスのランタイム型がStringにキャスト、StringないClassCastExceptionスローします。

一方、すべてのオブジェクトにはtoString()メソッドの実装があるため、session.getAttribute("MyKeyValue").toString()は常に機能します(session.getAttribute("MyKeyValue")はnullではないと仮定します)。

session.getAttribute("MyKeyValue")Stringを返さないので、ところで、(あなたがBoolean.parseBoolean()が動作することを期待しているため)、それはBooleanを返す可能性があるので、その場合は、代わりにStringに変換すると、その後BooleanへあなただけBooleanにキャストすることができます

Boolean myBoolVal = (Boolean) session.getAttribute("MyKeyValue"); 
0

あなたがそれにセッションオブジェクトにキーを任意のしたいオブジェクトと関連付けるを設定することができます。どのオブジェクトも、どのクラスのオブジェクトでも意味します。いずれのクラスもObjectという間接的なサブクラスであるため、setgetObjectと入力してください。

getでオブジェクトを取得すると、単にObjectと入力されますが、確かにサブクラスの一部です。元のクラスがStringでない場合、キャスト/変換を実現できないという例外がスローされます(Stringにキャストする(ダウン))。任意のObjectインスタンスは(それを画面上のプレゼンテーションのために、主に有用)オブジェクトのString表現を取得するために呼び出すことができる方法toString()を持っているので、1

オプション2つの作品あなたのオプションのためのケースのようです。次にparseその表現(おそらく"true"または"false")は、trueまたはfalsebooleanを取得します。

だから、あなたが仕事にあなたのオプション1を使用する場合は、あなたのオブジェクトは、おそらくBooleanインスタンスであるとして、あなたが使用することができます。ここ

boolean myBoolVal = (Boolean)session.getAttribute("MyKeyValue"); 
+0

'static'メソッド' Boolean.parseBoolean(String) 'は'ブール 'ではなく'ブール 'を返します。 http://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html#parseBoolean-java.lang.String-ここでアンボックスはありません。 –

+0

修正しました。ありがとうございます。 –

+0

また、unboxingは値が 'null'(OPの' toString'-versionのように)であればNullPointerExceptionをスローします。 – Hulk

関連する問題