String.valueOf()メソッドにNet型クラスを代入したらどうなる?
Net型の 変数Nom01をString.valueOf()を使ってStringにキャストは可能でしょうか?
java
1public String test(String netNo){ 2 3 Net Nom01= Yoyaku(netNo); 4 String Nom02= String.valueOf(Nom01); 5} 6 7 public String Yoyaku(String inData){ 8 String ch = inData; 9 return Ch; 10} 11 12}
java
1class Net{ 2 private String num; 3 4 public String getNetNo(){ 5 return netno; 6 } 7 8 public String setNetNo(){ 9 this.netno; 10 } 11 12 13}
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
既にあるように、
String#valueOf(Object)の実装は、こう。
Java
1 public static String valueOf(Object obj) { 2 return (obj == null) ? "null" : obj.toString(); 3 }
引数がnullなら"null"を返し、そうでなければ引数のtoString()メソッドを呼ぶだけ。
で、これで何が行われているのかというと、
String.valueOf(Nom01)
としたとき、valueOfメソッドの、Object objにNom01の中身が渡されてメソッドが呼び出されます。
上のコードのobj
の中身はNom01
と同じインスタンスへの参照となります。
(実質、obj=Nom01と思ってください)
return (obj == null) ? "null" : obj.toString();
は、三項演算子なので、まず、objつまりNom01がnullかどうかを確認して、
もし、nullであるならば、"null"
という文字列を返します。
それ以外の場合であれば、
obj.toString()
を呼び出し、その返り値を、そのまま自身の返り値とする。
ここではobjとは、Nom01の事ですから、呼び出されるのは、Nom01、ひいてはNetクラスのもつtoStringメソッドとなります。
そういうメソッドが、valueOf(Object)メソッドです。
つまり、valueOfメソッドがやっている事は、オブジェクトをStringに変換するなんてことでは無く、
nullだった場合に、"null"という文字列を返すだけで、
実際の文字列への変換は、渡されたオブジェクト自身のメソッドに、丸投げしているのです。
次に丸投げされた、.toStringですが、Netクラスの定義はこうですので、
Java
1class Net{ 2 private String num; 3 4 public String getNetNo(){ 5 return netno; 6 } 7 public String setNetNo(){ 8 this.netno; 9 } 10}
そもそも、Netクラスには、toStringメソッドが存在しません。
しかし、Javaでは、全てのクラスがObjectクラスを祖とするクラスツリーに含まれていることになっています。
クラスの継承を何も指定しなかった場合、Objectクラスを自動的に継承します。
これはそういう仕様です。
そして、toStringメソッドは、Objectクラスが持っています。
つまり、Objectクラスを継承したNetクラスも、toStringメソッドを持っているのです。
しかし、その実装はおそらくあなたの期待するものではないと思います。
なので、自分の思い通りの動きにするには、NetクラスでtoStringメソッドをオーバーライドする必要があります。
オーバーライドする事で、好きな値を、インスタンスの文字列として設定することができます。
たとえば、こんな感じに。
Java
1 @Override 2 public String toString() { 3 return "返したい文字列"; 4 }
(よく見たらNetクラスの定義滅茶苦茶なのね^^;
実例あげようとしたら無理だった)
それをやって初めて、String.valueOf(Nom01)
が期待通りの動作になります。
投稿2020/09/08 05:43
編集2020/09/08 06:50総合スコア1218
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/08 07:13
2020/09/08 07:24
退会済みユーザー
2020/09/08 07:27
退会済みユーザー
2020/09/08 07:56 編集
0
String#valueOf(Object)の実装は、こう。
java
1 public static String valueOf(Object obj) { 2 return (obj == null) ? "null" : obj.toString(); 3 }
引数がnullなら"null"を返し、そうでなければ引数のtoString()メソッドを呼ぶだけ。
をString.valueOf()を使ってStringにキャストは可能でしょうか?
戻り値は、Stringなので、String型にキャストする必要は、ありません。
投稿2020/09/08 03:51
総合スコア4061
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/08 04:01
2020/09/08 04:09
退会済みユーザー
2020/09/08 04:23
2020/09/08 04:54
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。