web-dev-qa-db-ja.com

StringのtoString()メソッドには実用的な目的がありますか?

私は the docs を読んでいて、それに気づきました。想像もしなかった。説明:

このオブジェクト(既に文字列です!)自体が返されます。

慣例を満たすか、コンピューティングリソースを使用する以外に、Javaの.toString()は、String自体を使用しない場合、Stringに対して何をしますか?なぜ、クラス_Java.lang.Object_から.toString()を単純に継承しないのですか?

編集:

多態性の状況では、親のtoString()をオーバーライドするため、独自のtoString()メソッドが存在する必要があることを理解しています。最初の質問で知りたいのは、stringVariable/_"String value"_を使用する場合とstringVariable.toString()/"String value".toString()を使用する場合で、何か異なる状況が発生するかどうかです。

例gr .: System.out.println(stringVariable.toString());のような出力操作、またはstringVariable = "String value".toString();のような値の割り当て。

19
user985358

規約を満たすか、コンピューティングリソースを使用する以外に、Java内の.toString()は、文字列自体を使用しない場合、文字列に対して何をしますか?

多態的に呼び出されたときに適切な結果が得られることを意味します。

Java.lang.Objectクラスから.toString()を単純に継承しないのはなぜですか?

それは同じ結果をもたらさず、そしてほぼ確実に望ましい結果をもたらさないためです。

Object.toString()は、オブジェクトの合理的に有用な文字列表現を提供することを目的としています。 Object実装は、大まかなIDヒントに使用できるタイプと値に関する情報を提供します(診断的には有用ですが、それだけです)。それは明らかにnot文字列の最も有用な文字列表現です-文字列自体です。

私はwouldtoStringがかなり厄介な方法で定義されているのは残念だと言いますが(結果がマシン、開発者、またはユーザーの消費向けかどうかは明らかではありません)、それは明白に感じますStringは実装で自分自身を返すと私には思います。

37
Jon Skeet

実用的な例:

_public abstract class MetadataProcessor {

protected void processMetadata() {    
   Map<String, Object> metadata = getMetadata();
   for(String key : metadata.keySet()) {
      if(metadata.get(key) instanceof Date) {
      processDate(metadata.get(key));
   } else { //String or any other object type
      processString(metadata.get(key).toString());
   }
}

private void processDate(Date date) {
   (...)
}

private void processString(String string) {
   (...)
}

/**
* contains document's metadata, values must be String or Date
**/
protected abstract Map<String, Object> getMetadata();
}
_

Stringの.toString()がString自体を返さない場合は、上記のコードで追加のif(foo instanceof String)が必要になります。

1
Mr.Radar
_public final class String
extends Object
implements Serializable, Comparable<String>, CharSequence
_

参照: https://docs.Oracle.com/javase/10/docs/api/Java/lang/String.html

すべてのオブジェクトにはtoString()メソッドがあります( https://docs.Oracle.com/javase/10/docs/api/Java/lang/Object.html#toString() を参照) 。 Stringはオブジェクトのタイプであるため、その基本クラスからメソッドを実装するには、メソッドtoString()も必要です。

0
Do Nhu Vy

Java=にtoStringメソッドを実装するには、ObjecttoStringメソッドをオーバーライドします。Java toString()メソッドは、文字列表現が必要な場合に使用されますオブジェクトのObjectクラスで定義されています。このメソッドをオーバーライドして、StringObject表現をカスタマイズできます。

0
Aditya Kansara