Имеет ли метод String toString() практическую цель?
Я читал документы и заметил это. Никогда не воображал. Описание:
Этот объект (который уже является строкой!) сам возвращается.
Помимо соглашений о добавлении или использования вычислительных ресурсов, что делает .toString()
в Java на String
, которое с помощью самого String
не будет? Почему он просто не наследует .toString()
из класса java.lang.Object
?
EDIT:
Я понимаю, что в ситуациях полиморфизма существует собственный метод toString()
, поскольку он перегружает его родительский toString()
. То, что я хочу знать в первом вопросе, - это ситуация, при которой вы можете использовать что-то другое, используя stringVariable
/"String value"
и используя stringVariable.toString()
/"String value".toString()
.
Ex. gr: Операция вывода, например System.out.println(stringVariable.toString());
или присвоение значения, например stringVariable = "String value".toString();
.
Ответы
Ответ 1
Помимо соглашений об использовании или использования вычислительных ресурсов, что делает .toString() в Java на String, которая использует сам String, не будет?
Это означает, что он дает соответствующий результат, когда он называется полиморфно.
Почему он просто не наследует .toString() из класса java.lang.Object?
Потому что это не даст тот же результат и почти наверняка не желаемый результат.
Object.toString()
предназначен для предоставления достаточно полезного строкового представления объекта. Реализация Object
дает информацию о типе и значении, которое может использоваться для грубых намеков идентификации (диагностически полезно, но все). Это явно не самое полезное строковое представление для строки - сама строка.
Хотя я бы сказал, что жаль, что toString
определяется довольно грубо (неясно, является ли результат предназначен для машинного, разработчика или пользовательского потребления), мне кажется очевидным, что String
вернется в реализацию.
Ответ 2
Реализация метода toString
в java выполняется путем переопределения метода Object
toString
. Метод java toString()
используется, когда нам требуется строковое представление объекта. Он определен в классе Object
. Этот метод можно переопределить, чтобы настроить представление String
Object
.
Ответ 3
Практический пример:
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 metadata, values must be String or Date
**/
protected abstract Map<String, Object> getMetadata();
}
Если String.toString() не вернет сама String, в приведенном выше коде потребуется дополнительный if(foo instanceof String)
.