Сегодня один из тех дней, когда вы начинаете задаваться вопросом о том, что вы не знаете (или еще не сломаете) при кодировании, в этом случае это поворот метода toString
в java, как правило (и, как описано в ответ here) по умолчанию toString
представление многих объектов - это имя класса a, затем символ @
, за которым следует шестнадцатеричное строковое представление hashcode
такого экземпляра, мой вопрос: Могу ли я на самом деле что-то сделать с таким строковым представлением?Является ли метод DEFAULT toString в java действительно полезным?
Я имею в виду, что это не адрес памяти, на который я могу манипулировать или указывать (давайте не будем говорить о безопасности, поговорим о вариантах). Я знаю, что невозможно восстановить объектную базу на своем хэш-коде, поэтому я действительно не вижу преимущества этой реализации.
Я думал, что было бы лучше иметь реализацию, которая перемещает объект как дерево и печатает (возможно, используя отражение) все имена его атрибутов и его значения, возможно, даже имена общественности функции, интерфейсы, которые реализуют, класс, который распространяется на этот класс и т. д., даже если это может быть тяжелая функция. Не должно быть проблемой, если вы не используете ее очень часто или в производстве, и если вы собираетесь ее использовать, то переопределите ее, чтобы она соответствовала вашим требованиям, по крайней мере, я думаю, что это будет лучшей реализацией.
На данный момент единственное, что я могу представить, это напечатать строку из двух экземпляров и проверить, что это разные экземпляры, но ... c'mon, как разработчик, вы можете сделать это разумнее!
P.S. Мне не нужны ответы с мнениями «Я думаю, что это реализовано таким образом, потому что ...», я хочу, чтобы кто-то рассказал мне, как я могу сделать такую реализацию этого метода полезной для чего-то (или, по крайней мере, кого-то рассказывающие мне «нет, что реализация сек ## кс»)
UPDATE
1) Я не обсуждаю полезность метода
2) Я не обсуждаю, должен ли он быть переопределен или нет (он должен!)
3) Я не обсуждаю, будет ли другая реализация будет тяжелее обрабатывать
4) Я не обсуждаю, нужна ли реализация по умолчанию или нет (это!)
вопрос заключается в том могу ли я извлечь выгоду из реализации DEFAULT, а не сравнивать, что экземпляр из 2-х объектов является или не является тем же самым при отладке его печати или при выполнении любой другой задачи в качестве разработчика единственным преимуществом, предоставляемым от такой функции, является то, что и НЕ очень полезен (ни при отладке, ни в любой другой момент).
БЕЗ ПРЕВРАЩЕНИЯ ЭТОГО Могу ли я сделать что-то более полезное, чем сравнение того, что два экземпляра одинаковы?
Это ** представление ** по умолчанию **. Это позволяет дифференцировать объекты, как в: если они одинаковые, это показывает. Если вам нужен что-то лучше для вашего класса, вы должны переопределить его. –
Реализация по умолчанию в основном полезна для исключений и мониторинга. Вариант использования - это, например, идентификация экземпляра класса. – JacksOnF1re
при отладке некоторых IDE отображает представление объектов в вашем списке просмотра toString. Если вы подготовили краткое представление, вы можете увидеть, что мы получили в объектах, не извлекая дерево. – hsnkhrmn