Звучит немного глупо, но мне нужна помощь по моему toString() методу, и это очень раздражает. Я попытался поискать в Интернете, потому что toString это тот, где он облажался и "не находит детский конструктор # 2", хотя он есть, и я бы даже сделал что-то еще, но это не работает. Ок, этого было много, так что вот мой код:
publicKid(String n, double h, String date) { // method that toString() can't find somehow StringTokenizerst=newStringTokenizer(date, "/", true); n = this.name; h = this.height; }
public String toString() { return Kid(this.name, this.height, this.bDay); } } //end class
Итак, моя строка toString выше (я знаю, мой третий параметр отключен, должна быть строкой) отключена. Если я жестко закодирую значение для третьей вещи, она выходит из строя и сообщает, что не может найти это (вверху). Итак, как я могу получить дату и разделить ее?
Ниже приведен вызов класса
classDriver { publicstaticvoidmain(String[] args) { Kidkid1=newKid("Lexie", 2.6, "11/5/2009"); System.out.println(kid1.toString()); } //end main method } //end class
Я пробовал исследовать несколько конструкторов, и это действительно не помогло. Я пробовал исследовать toString() методы и пробовал использовать логику предыдущих toString() методов, которую я создал ранее, но это совершенно новое, поэтому оно никогда не работало.
Я предлагаю вам использовать возможности вашей IDE для генерации toString метода. Не кодируйте его вручную.
Например, Eclipse может это сделать, если вы просто щелкните правой кнопкой мыши на исходном коде и выберите Source > Generate toString
Ответ 2
Java toString() метод
Если вы хотите представить какой-либо объект в виде строки, появляется метод toString().
Метод toString() возвращает строковое представление объекта.
Если вы печатаете какой-либо объект, компилятор java внутренне вызывает метод toString() для объекта. Таким образом, переопределение метода toString() возвращает желаемый результат, это может быть состояние объекта и т.д. зависит от вашей реализации.
Преимущество метода Java toString()
Переопределяя метод toString() класса Object, мы можем возвращать значения объекта, поэтому нам не нужно писать много кода.
Вывод без метода toString()
classStudent{ int id; String name; String address;
System.out.println(s1);//compiler writes here s1.toString() System.out.println(s2);//compiler writes here s2.toString() } }
Output:Student@2kaa9dc Student@4bbc148
Вы можете видеть в приведенном выше примере # 1. при печати s1 и s2 выводятся значения хэш-кодов объектов, но я хочу напечатать значения этих объектов. Поскольку компилятор java внутренне вызывает метод toString(), переопределение этого метода вернет указанные значения. Давайте разберемся в этом на примере, приведенном ниже:
Example#2
Output with overriding toString() method
classStudent{ int id; String name; String address;
//overriding the toString() method public String toString(){ return id+" "+name+" "+address; } publicstaticvoidmain(String args[]){ Student s1=newStudent(100,”Joe”,”success”); Student s2=newStudent(50,”Jeff”,”fail”);
System.out.println(s1);//compiler writes here s1.toString() System.out.println(s2);//compiler writes here s2.toString() } }
Output:100 Joe success 50 Jeff fail
Обратите внимание, что toString() в основном связан с концепцией полиморфизма в Java. В Eclipse попробуйте щелкнуть toString() и щелкните по нему правой кнопкой мыши.Затем нажмите "Открыть объявление" и посмотрите, откуда взялся суперкласс toString().
Ответ 3
Как объясняли другие, toString это не то место, где можно создавать экземпляр вашего класса. Вместо этого toString метод предназначен для создания строки, представляющей значение экземпляра вашего класса, сообщающей, по крайней мере, о наиболее важных полях данных, хранящихся в этом объекте. В большинстве случаев, toString используется для отладки и ведения журнала, а не для вашей бизнес-логики (за исключением некоторых исторических методов, таких как Integer.toString()).
Чтобы сгенерировать текст, представляющий значение объекта для отображения пользователю, добавьте другой метод. Люди часто называют метод чем-то вроде getDisplayName. Например, DayOfWeek::getDisplayName и Month::getDisplayName.
StringJoiner
Начиная с Java 8 и более поздних версий, самым современным способом реализации toString было бы использовать StringJoiner класс . Как сказано в документе:
StringJoiner используется для построения последовательности символов, разделенных разделителем и необязательно начинающихся с предоставленного префикса и заканчивающихся предоставленным суффиксом.
Используйте следующим образом:
@Override public String toString() { returnnewStringJoiner( // In Java 8 and later, StringJoiner is used to construct a sequence of characters separated by a delimiter and optionally starting with a supplied prefix and ending with a supplied suffix. " | " , // Delimiter Person.class.getSimpleName() + "[ " , // Prefix " ]"// Suffix ) .add( "name=" + name ) // Append .add( "phone=" + phone ) // Append .toString(); // Convert entire sequence to a single `String` object. }
Персона[ имя = Алиса | телефон = 555.867.5309 ]
record
Java 16 предлагает новый способ краткого определения класса, основной целью которого является прозрачная и неизменяемая передача данных: record.
Вы определяете запись, просто перечисляя тип и имя каждого поля-члена. Компилятор неявно создает конструктор, геттеры, equals & hashCode, и toString.
Реализация по умолчанию toString
Реализация по умолчанию toString включает в себя все без исключения поля-члены.
Вы можете переопределить реализацию по умолчанию своей собственной. Переопределения обычно не требуются, учитывая назначение записи как простого носителя данных.
Ответ 4
Вы можете создать новый объект в toString(). используйте