Рубрики
Без рубрики

Метод Java toString()

Метод Java toString, метод Java Object toString (), объект tostring, метод java toString, объект tostring java, метод переопределения java toString, метод Java String toString (), пример кода метода public String toString ().

Автор оригинала: Pankaj Kumar.

Метод Java toString-очень полезный метод, и хотя вы, возможно, этого не знаете, я уверен, что вы часто использовали его в своих программах.

Метод Java toString

public void println(Object x) {
    String s = String.valueOf(x);
    synchronized (this) {
        print(s);
        newLine();
    }
}

И String.valueOf() реализация выглядит так:

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

Таким образом, в конечном счете println() и print() функции вызывают метод объекта’ toString () , чтобы получить строковое представление, а затем распечатать его. Таким образом, приведенные ниже два утверждения приведут к одному и тому же результату.

System.out.println(object.toString());

System.out.println(object); 

Теперь, когда мы согласны с тем, что он часто используется, давайте начнем изучать метод toString более подробно.

Метод Java Object toString()

Давайте рассмотрим простую программу, в которой мы создадим объект java и вызовем его метод toString.

package com.journaldev.string;

public class JavaToString {

	public static void main(String[] args) {
		Data d = new Data(10, "Java");
		System.out.println(d);
	}
}

class Data {
	private int id;
	private String name;
	Data(int a, String b) {
		this.id = a;
		this.name = b;
	}
}

Когда я запускаю и компилирую эту программу, я получаю вывод в виде com.journaldev.string.Данные@7a46a697 .

Теперь возникают два вопроса: во – первых, где реализован метод toString (), потому что я не вижу его в классе данных? Во-вторых, что это за вывод, который вряд ли содержит какую-либо значимую информацию.

Мы знаем, что java поддерживает наследование и Объект находится на верхнем уровне этой иерархии, то есть там, где реализован метод toString . Если вы посмотрите на реализацию toString класса объектов, это выглядит так:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Теперь понятно, почему на выходе имя класса с@, а затем какое-то шестнадцатеричное число.

Важные моменты метода Java toString()

Давайте теперь посмотрим на метод javadoc Object toString() и посмотрим, что он говорит.

  1. Метод Java toString возвращает строковое представление объекта.
  2. Результатом должно быть краткое, но информативное представление, которое легко читается человеком.
  3. Рекомендуется, чтобы все подклассы переопределяли этот метод.

Основываясь на приведенной выше рекомендации, мы почти всегда должны переопределять метод toString (), чтобы возвращать полезную информацию об объекте. Итак, давайте изменим реализацию нашего класса данных и переопределим его метод toString.

package com.journaldev.string;

public class JavaToString {

	public static void main(String[] args) {
		Data d = new Data(10, "Java");
		System.out.println(d);
	}
}

class Data {
	private int id;
	private String name;

	Data(int a, String b) {
		this.id = a;
		this.name = b;
	}

	public int getId() {
		return id;
	}

	public String getName() {
		return name;
	}
	
	/**
	 * Returns JSON string with id and name
	 * Implementation can change in future, not to rely to convert object to JSON
	 */
	@Override
	public String toString() {
		return "{\"id\":"+id+", \"name\":\""+name+"\"}";
	}
}

Теперь, когда вы запустите вышеуказанную программу, вывод будет {"id":10, "имя":"Java"} . Теперь это имеет больше смысла для любого, кто смотрит на результат.

Важные моменты для переопределения метода toString()

Давайте рассмотрим некоторые важные моменты, которые вы должны учитывать при переопределении метода toString ().

  1. Всегда используйте @Переопределение аннотации с ним, чтобы избежать любых ошибок или нежелательных результатов из-за опечаток.
  2. Убедитесь, что возвращаете только полезные данные в методе toString (), ваш класс POJO может содержать некоторую конфиденциальную информацию, такую как идентификатор электронной почты, номер SSN и т.д. Вы должны либо замаскировать их, либо вообще избегать, иначе они могут быть напечатаны в журналах рабочего сервера и вызвать проблемы с безопасностью и конфиденциальностью данных.
  3. Всегда полезно предоставить некоторую документацию, касающуюся вывода метода toString (). Например, кто-то не должен использовать мою реализацию toString() для преобразования
  4. Вы всегда должны предоставлять методы получения для атрибутов объекта, которые являются частью выходной строки метода toString (). В противном случае программист был бы вынужден анализировать вывод toString (), чтобы получить нужные данные, потому что другого выбора нет.
  5. Всегда лучше предоставить реализацию метода toString (), даже если вы можете подумать, что это не требуется. Подумайте о приведенном ниже коде, в котором кто-то печатает список объектов данных.

    Какой выход вы бы предпочли?

    Без реализации toString () :

    С реализацией toString () :

Это все для краткого обзора метода java toString ().

Ссылка: API Doc