Возвращает строковое представление объекта. Как правило, toString
метод возвращает строку, которая «текстуально представляет» этот объект. В результате должно получиться краткое, но информативное представление, удобное для чтения. Рекомендуется, чтобы все подклассы переопределяли этот метод.
toStringМетод класса Object
возвращает строку , состоящую из имени класса которого объект является экземпляром, на-знак символ `@», и без знака шестнадцатеричное представление хэш - кода объекта. Другими словами, этот метод возвращает строку, равную значению:
Надеюсь, вы знаете, что toStringэто не предназначено и не подходит для пользовательского интерфейса.
Powerslave
@Powerslave тогда объясните, почему все компоненты Swing используются toStringдля отображения объекта в графическом интерфейсе? Если у меня есть богатый объект, и я хочу показать его в графическом интерфейсе, то нет, я не создаю для него дополнительный рендерер и не извлекаю строковое свойство из объекта, чтобы использовать его в графическом интерфейсе, я сохраняю его прост и реализован, toStringчтобы можно было обойти все эти накладные расходы. Если вы хотите сделать это более чистым способом, создайте класс-оболочку, который предназначен для пользовательского интерфейса и реализует его toStringметод для возврата строкового свойства обертки.
Timmos
1
@Timmos Если бы твои друзья спрыгнули с моста, ты бы последовал за ними? Тот факт, что разработчики Swing используют (читать; злоупотреблять) функцию toString, не означает, что вы тоже должны это делать.
Toby
2
Это, безусловно, самый простой способ выполнить работу, учитывая, что вы продолжаете использовать Swing API по умолчанию. Если вам нужен пользовательский рендеринг, хорошо, установите пользовательский рендерер на свой компонент. Если вы просто хотите отобразить объект, представленный строкой, то реализовать toString () намного проще по сравнению с настраиваемым средством визуализации, у которого есть все возможные подводные камни, чтобы сделать это правильно. Я считаю странным ваше сравнение с прыжком с моста.
Timmos
35
toString()Метод возвращает текстовое представление объекта. Базовая реализация уже включена, java.lang.Objectпоэтому, поскольку все объекты, унаследованные от java.lang.Objectнее, гарантируется, что каждый объект в Java имеет этот метод.
Переопределение метода всегда является хорошей идеей, особенно когда речь идет об отладке, потому что отладчики часто показывают объекты по результату toString()метода. Так что используйте осмысленную реализацию, но используйте ее в технических целях. Логика приложения должна использовать геттеры:
При желании он может использоваться в контексте приложения, но гораздо чаще он используется для целей отладки. Например, когда вы попадаете в точку останова в среде IDE, гораздо легче читать значимые toString()объекты, чем проверять их члены.
Нет установленных требований к тому, что toString()должен делать метод. По соглашению, чаще всего он сообщает вам имя класса и значения соответствующих членов данных. Чаще всего toString()методы генерируются автоматически в IDE.
Полагаться на определенный вывод toString()метода или анализировать его в программе - плохая идея. Что бы вы ни делали, не идите по этому пути.
toString () возвращает строковое / текстовое представление объекта. Обычно используется для диагностических целей, таких как отладка, ведение журнала и т. Д., Метод toString () используется для чтения значимых деталей об объекте.
Он автоматически вызывается, когда объект передается в println, print, printf, String.format (), assert или в оператор конкатенации строк.
Реализация toString () по умолчанию в классе Object возвращает строку, состоящую из имени класса этого объекта, за которым следует знак @ и беззнаковое шестнадцатеричное представление хэш-кода этого объекта, используя следующую логику:
Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader
Теперь, переопределив toString () в классе Coordinates, как показано ниже,
@OverridepublicString toString(){return"("+ x +", "+ y +")";}
приводит к
Bourne's current location - (1.0, 2.0) //concise and informative
Полезность переопределения toString () становится еще больше, когда метод вызывается для коллекций, содержащих ссылки на эти объекты. Например, следующие
Практически всегда следует переопределять метод toString (). Один из случаев, когда переопределение не требуется, - это служебные классы, которые группируют статические служебные методы, как java.util.Math . Случай, когда переопределение не требуется, довольно интуитивно понятен; почти всегда вы бы знали.
Возвращаемая строка должна быть краткой и информативной, в идеале не требующей пояснений.
По крайней мере, поля, используемые для установления эквивалентности между двумя разными объектами, то есть поля, используемые в реализации метода equals (), должны выводиться методом toString ().
Предоставьте средства доступа / средства получения для всех полей экземпляра, содержащихся в возвращаемой строке. Например, в классе "Координаты"
Если вы не используете toString () в классе Pojo (Student.java), вы получите результат вроде. [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]Чтобы избежать подобных проблем, мы используем метод toString ().
работает, и, переопределив стандартный toString () из Object в ваших собственных классах, вы также можете сделать свои объекты полезными в контекстах String.
(и считайте это черным ящиком! Никогда, никогда не используйте содержимое для чего-либо другого, кроме как для презентации человеку)
Основная цель toString - создать строковое представление объекта, то есть возвращаемое значение всегда является строкой. В большинстве случаев это просто класс объекта и имя пакета, но в некоторых случаях, например StringBuilder, вы фактически получаете текст String.
/**
* This toString-Method works for every Class, where you want to display all the fields and its values
*/publicString toString(){StringBuffer sb =newStringBuffer();Field[] fields = getClass().getDeclaredFields();//Get all fields incl. private onesfor(Field field : fields){try{
field.setAccessible(true);String key=field.getName();String value;try{
value =(String) field.get(this);}catch(ClassCastException e){
value="";}
sb.append(key).append(": ").append(value).append("\n");}catch(IllegalArgumentException e){
e.printStackTrace();}catch(SecurityException e){
e.printStackTrace();}catch(IllegalAccessException e){
e.printStackTrace();}}return sb.toString();}
Если вы сначала изучите Python, а затем Java. Я думаю, что он играет ту же роль, что и __str__()метод в Python, это волшебный метод, подобный __dict__()и, __init__()но для ссылки на строку, представляющую объект.
Ответы:
Из
Object.toString
документов:Пример:
источник
Использование
String.toString
:Всякий раз, когда вам нужно изучить конструктор с именем value в
String
форме, вы можете просто использоватьString.toString
... в качестве примера ...... скопируйте эту программу в свой Eclipse и запустите ее ... вы получите представление о
String.toString
...источник
toString
это не предназначено и не подходит для пользовательского интерфейса.toString
для отображения объекта в графическом интерфейсе? Если у меня есть богатый объект, и я хочу показать его в графическом интерфейсе, то нет, я не создаю для него дополнительный рендерер и не извлекаю строковое свойство из объекта, чтобы использовать его в графическом интерфейсе, я сохраняю его прост и реализован,toString
чтобы можно было обойти все эти накладные расходы. Если вы хотите сделать это более чистым способом, создайте класс-оболочку, который предназначен для пользовательского интерфейса и реализует егоtoString
метод для возврата строкового свойства обертки.toString()
Метод возвращает текстовое представление объекта. Базовая реализация уже включена,java.lang.Object
поэтому, поскольку все объекты, унаследованные отjava.lang.Object
нее, гарантируется, что каждый объект в Java имеет этот метод.Переопределение метода всегда является хорошей идеей, особенно когда речь идет об отладке, потому что отладчики часто показывают объекты по результату
toString()
метода. Так что используйте осмысленную реализацию, но используйте ее в технических целях. Логика приложения должна использовать геттеры:источник
При желании он может использоваться в контексте приложения, но гораздо чаще он используется для целей отладки. Например, когда вы попадаете в точку останова в среде IDE, гораздо легче читать значимые
toString()
объекты, чем проверять их члены.Нет установленных требований к тому, что
toString()
должен делать метод. По соглашению, чаще всего он сообщает вам имя класса и значения соответствующих членов данных. Чаще всегоtoString()
методы генерируются автоматически в IDE.Полагаться на определенный вывод
toString()
метода или анализировать его в программе - плохая идея. Что бы вы ни делали, не идите по этому пути.источник
toString () возвращает строковое / текстовое представление объекта. Обычно используется для диагностических целей, таких как отладка, ведение журнала и т. Д., Метод toString () используется для чтения значимых деталей об объекте.
Он автоматически вызывается, когда объект передается в println, print, printf, String.format (), assert или в оператор конкатенации строк.
Реализация toString () по умолчанию в классе Object возвращает строку, состоящую из имени класса этого объекта, за которым следует знак @ и беззнаковое шестнадцатеричное представление хэш-кода этого объекта, используя следующую логику:
Например, следующие
печать
Теперь, переопределив toString () в классе Coordinates, как показано ниже,
приводит к
Полезность переопределения toString () становится еще больше, когда метод вызывается для коллекций, содержащих ссылки на эти объекты. Например, следующие
печать
вместо этого,
Несколько указателей на реализацию,
Предоставьте средства доступа / средства получения для всех полей экземпляра, содержащихся в возвращаемой строке. Например, в классе "Координаты"
Подробное описание метода toString () содержится в пункте 10 книги «Эффективная Java ™, второе издание» Джоша Блоха.
источник
Кодирование:
Student.java:
Вывод:
Если вы не используете toString () в классе Pojo (Student.java), вы получите результат вроде.
[com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
Чтобы избежать подобных проблем, мы используем метод toString ().источник
Всякий раз, когда вы обращаетесь к объекту (не являющемуся String) в контексте String, компилятор вызывает под крышкой toString ().
Вот почему
работает, и, переопределив стандартный toString () из Object в ваших собственных классах, вы также можете сделать свои объекты полезными в контекстах String.
(и считайте это черным ящиком! Никогда, никогда не используйте содержимое для чего-либо другого, кроме как для презентации человеку)
источник
Правильно переопределенный метод toString может помочь при ведении журнала и отладке Java.
источник
Помимо того, что Клетус ответил относительно отладки, он используется всякий раз, когда вы выводите объект, например, когда вы используете
или
источник
Основная цель toString - создать строковое представление объекта, то есть возвращаемое значение всегда является строкой. В большинстве случаев это просто класс объекта и имя пакета, но в некоторых случаях, например StringBuilder, вы фактически получаете текст String.
источник
источник
Если вы сначала изучите Python, а затем Java. Я думаю, что он играет ту же роль, что и
__str__()
метод в Python, это волшебный метод, подобный__dict__()
и,__init__()
но для ссылки на строку, представляющую объект.источник
toString()
преобразует указанный объект в строковое значение.источник