私は 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();
のような値の割り当て。
規約を満たすか、コンピューティングリソースを使用する以外に、Java内の.toString()は、文字列自体を使用しない場合、文字列に対して何をしますか?
多態的に呼び出されたときに適切な結果が得られることを意味します。
Java.lang.Objectクラスから.toString()を単純に継承しないのはなぜですか?
それは同じ結果をもたらさず、そしてほぼ確実に望ましい結果をもたらさないためです。
Object.toString()
は、オブジェクトの合理的に有用な文字列表現を提供することを目的としています。 Object
実装は、大まかなIDヒントに使用できるタイプと値に関する情報を提供します(診断的には有用ですが、それだけです)。それは明らかにnot文字列の最も有用な文字列表現です-文字列自体です。
私はwouldtoString
がかなり厄介な方法で定義されているのは残念だと言いますが(結果がマシン、開発者、またはユーザーの消費向けかどうかは明らかではありません)、それは明白に感じますString
は実装で自分自身を返すと私には思います。
実用的な例:
_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)
が必要になります。
_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()
も必要です。
Java=にtoString
メソッドを実装するには、Object
のtoString
メソッドをオーバーライドします。Java toString()
メソッドは、文字列表現が必要な場合に使用されますオブジェクトのObject
クラスで定義されています。このメソッドをオーバーライドして、String
のObject
表現をカスタマイズできます。