Как правильно переопределить 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 выше (я знаю, мой третий параметр выключен, должен быть строкой) выключен. Если я жестко задать значение, в-третьих, это сходит с ума и говорит, что он не может найти это (выше). Итак, как я могу получить дату и разбить ее?
класс вызова это ниже
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()
методы логики, которые я создал ранее, но это совершенно новый, так что он никогда не работал.
помочь?
7 ответов:
The
toString
должен вернуть aString
.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 () класса 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:Student@2kaa9dc Student@4bbc148
Вы можете видеть в приведенном выше примере #1. печать s1 и s2 печатает значения хэш-кода объектов, но я хочу распечатать значения этих объектов. Поскольку компилятор 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() в основном связан с понятием полиморфизма в Java. В Eclipse, попробуйте нажать на toString () и щелкните правой кнопкой мыши на нем.Затем нажмите на Open Declaration и посмотрите, откуда берется суперкласс toString ().
Вы можете создать новый объект в 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
надеется, что это поможет спасибо
мы даже можем написать так, создав новый строковый объект в классе и назначив ему то, что мы хотим в конструкторе, и вернуть этот метод в 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() } }