Как правильно переопределить toString () на Java?

Звучит немного глупо, но мне нужна помощь в моем методе toString (), и это очень раздражает. Я попытался найти онлайн, потому что toString – это тот, где он закручивает и «не находит конструктор Kid № 2», хотя он есть, и я бы даже сделал что-то еще, и он не работает. Хорошо, это было так, вот мой код:

import java.util.*; class Kid { String name; double height; GregorianCalendar bDay; public Kid () { this.name = "HEAD"; this.height = 1; this.bDay = new GregorianCalendar(1111,1,1); } public Kid (String n, double h, String date) { // method that toString() can't find somehow StringTokenizer st = new StringTokenizer(date, "/", true); n = this.name; h = this.height; } public String toString() { return Kid(this.name, this.height, this.bDay); } } //end class 

Итак, мой toString выше (я знаю, мой третий параметр выключен, должен быть String) выключен. Если я жестко задаю значение для третьей вещи, он переходит в haywire и говорит, что он не может найти это (вверху). Итак, как я могу получить дату и разбить ее?

Класс, вызывающий это, ниже

 class Driver { public static void main (String[] args) { Kid kid1 = new Kid("Lexie", 2.6, "11/5/2009"); System.out.println(kid1.toString()); } //end main method } //end class 

Я пытался исследовать несколько конструкторов, и это действительно не помогло. Я попытался изучить методы toString () и попытался использовать предыдущую логику методов toString (), которую я создал ранее, но это совершенно новый, так что он никогда не работал.

Помогите?

Предполагается, что toString вернет String .

 public String toString() { return "Name: '" + this.name + "', Height: '" + this.height + "', Birthday: '" + this.bDay + "'"; } 

Я предлагаю вам использовать функции IDE для генерации метода toString . Не указывайте его вручную.

Например, Eclipse может сделать это, если вы просто щелкаете правой кнопкой мыши по исходному коду и выбираете Source > Generate toString

Метод Java toString ()

Если вы хотите представить любой объект в виде строки, то появляется метод toString ().

Метод toString () возвращает строковое представление объекта.

Если вы печатаете какой-либо объект, java-компилятор внутренне вызывает метод toString () объекта. Таким образом, переопределение метода toString () возвращает желаемый результат, это может быть состояние объекта и т. Д., Зависит от вашей реализации.

Преимущество метода Java toString ()

Переопределяя метод toString () classа Object, мы можем вернуть значения объекта, поэтому нам не нужно писать много кода.

Вывод без метода toString ()

 class Student{ int id; String name; String address; Student(int id, String name, String address){ this.id=id; this.name=name; this.address=address; } public static void main(String args[]){ Student s1=new Student(100,”Joe”,”success”); Student s2=new Student(50,”Jeff”,”fail”); System.out.println(s1);//compiler writes here s1.toString() System.out.println(s2);//compiler writes here s2.toString() } } Output:[email protected] [email protected] 

Вы можете видеть в приведенном выше примере # 1. печать s1 и s2 печатает значения Hashcode для объектов, но я хочу напечатать значения этих объектов. Поскольку java-компилятор внутренне вызывает метод toString (), переопределение этого метода возвращает указанные значения. Давайте поймем это с приведенным ниже примером:

 Example#2 Output with overriding toString() method class Student{ int id; String name; String address; Student(int id, String name, String address){ this.id=id; this.name=name; this.address=address; } //overriding the toString() method public String toString(){ return id+" "+name+" "+address; } public static void main(String args[]){ Student s1=new Student(100,”Joe”,”success”); Student s2=new Student(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 () в основном связано с концепцией polymorphismа в Java. В Eclipse попробуйте щелкнуть по кнопке toString () и щелкнуть правой кнопкой мыши по ней. Затем нажмите «Открыть декларацию» и посмотрите, откуда появился суперclass ssString ().

Вы можете создать новый объект в toString (). использование

 return "Name = " + this.name +" height= " + this.height; 

вместо

 return Kid(this.name, this.height, this.bDay); 

При необходимости вы можете изменить возвращаемую строку. Существуют другие способы хранения даты вместо каландра.

Вы не можете вызвать конструктор, как если бы это был обычный метод, вы можете только его вызвать с помощью new для создания нового объекта:

 Kid newKid = new Kid(this.name, this.height, this.bDay); 

Но создание нового объекта из вашего метода toString () – это не то, что вы хотите делать.

Следующий код – образец. Вопрос, основанный на том же, вместо использования преобразования на основе IDE, есть более быстрый способ реализации, чтобы в будущем произошли изменения, нам не нужно изменять значения снова и снова?

 @Override public String toString() { return "ContractDTO{" + "contractId='" + contractId + '\'' + ", contractTemplateId='" + contractTemplateId + '\'' + '}'; } 

Ну, на самом деле вам нужно будет вернуть что-то вроде этого, потому что toString должен возвращать строку

 public String toString() { return "Name :" + this.name + "whatever :" + this.whatever + ""; } 

и вы на самом деле делаете что-то не так в конструкторе, который вы задали переменной, которую пользователь установил для имени, в то время как вам нужно сделать противоположное. Что вы не должны делать

 n = this.name 

Что ты должен делать

 this.name = n 

Надеюсь, это поможет

мы можем писать так же, создавая новый объект String в classе и назначая ему то, что когда-либо хотим в конструкторе, и возвращаем его в метод toString, который переопределен

 public class Student{ int id; String name; String address; String details; Student(int id, String name, String address){ this.id=id; this.name=name; this.address=address; this.details=id+" "+name+" "+address; } //overriding the toString() method public String toString(){ return details; } public static void main(String args[]){ Student s1=new Student(100,"Joe","success"); Student s2=new Student(50,"Jeff","fail"); System.out.println(s1);//compiler writes here s1.toString() System.out.println(s2);//compiler writes here s2.toString() } } 
  • Как распечатать escape-символы в Java
  • Как вернуть несколько значений?
  • Android - обновить контакт
  • Преобразование UTC в текущее время локали
  • Задача unmarshalling parcelables
  • Android: Разница между onInterceptTouchEvent и dispatchTouchEvent?
  • Проблемы с альфа-тестированием OpenGL ES2
  • Java: Локальная переменная mi, определенная в охватывающей области, должна быть окончательной или эффективно конечной
  • java.lang.NumberFormatException: для строки ввода
  • Получить объект JSON из ответа HTTP
  • Уровень заряда батареи и состояние в Android
  • Interesting Posts

    Создайте переменную в файле .CSS для использования в этом файле .CSS

    Уникальное ограничение, позволяющее пустым значениям в MySQL

    Скопируйте и вставьте без отслеживаемых изменений в MS Office 2013

    Страница Bash Man: kill <pid> vs kill -9 <pid>

    Как проверить результат сценария ftp с файлом bat?

    Как управлять кнопкой возврата в действии

    Зачем начинать с диска C в современных вычислениях?

    Слияние видео и аудио с пользовательским панорамированием

    Удалить символы после определенного символа в строке, а затем удалить подстроку?

    Сохранение контекстного меню правой кнопкой мыши

    Почему не конечная «локальная» переменная не может использоваться внутри внутреннего classа, и вместо этого может использоваться не конечное поле охватывающего classа?

    Android – как установить будильник на определенную дату

    objective C – Как использовать метод initWithCoder?

    Доступ к последней записи на карте

    В чем разница между кастингом и конверсией?

    Давайте будем гением компьютера.