Kursusindhold
Java Udvidet
Java Udvidet
Metode ToString()
Hvordan udskrives et objekt nemmere?
For at vise alle dataene for et objekt ved hjælp af kommandoen System.out.println(object);
i Java, findes der en metode kaldet toString();
.
toString()
Metoden toString
i Java er en indbygget metode, der tilhører Object
-klassen. Den bruges til at returnere en strengrepræsentation af et objekt. Som standard, når vi kalder toString
på et objekt, returnerer den en streng, der indeholder klassenavnet efterfulgt af objektets hashcode.
Lad os se på eksemplet:
Main.java
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } }
HashCode
En hashcode er, kort sagt, en unik identifikator for et objekt, der er gemt i hukommelsen. Vi kan også se hashkoden for et objekt ved at kalde hashCode()
-metoden på det, for eksempel:
Main.java
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); int code = bob.hashCode(); System.out.println(code); } }
I dette tilfælde opstår spørgsmålet: hvordan kan vi få noget mere specifikt i stedet for hashkoden for et objekt? Til sådanne tilfælde kan vi overskrive toString()
-metoden.
Arv og metodeoverskrivning er omfattende emner, som vi vil gennemgå i et separat kursus. For nu vil vi kun bruge metodeoverskrivning til toString()
-metoden.
Sådan bruges toString()
For at overskrive en metode skal vi bruge følgende syntaks:
Main.java
@Override public String toString() { // block of code }
Vi bruger annotationen @Override
før denne metode. Med denne annotation genkender compileren, at vi overskriver denne metode. Dernæst angiver vi syntaksen public String toString()
, hvilket viser, hvilken præcis metode vi overskriver.
I metodens krop definerer vi, hvordan vores objekt skal repræsenteres som en streng. Lad os overskrive metoden for Person
-klassen:
Person.java
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Kommandoen System.lineSeparator()
bruges til at oprette en ny linje.
Vi har defineret, hvordan vores objekt skal vises, ved at sammenkæde strenge med deres værdier. Derfor vil vi, når vi forsøger at udskrive et objekt af klassen Person
, se detaljeret information om hvert felt.
Lad os udskrive et objekt ved hjælp af main
-metoden og se, hvordan det ser ud:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "."; } }
Vi har fået information om klassen, som objektet bob
tilhører, samt detaljer om alle dets felter.
Dermed kan vi overskrive og definere metoden toString()
for at vise ønsket information, når et objekt udskrives. Lad os oprette et andet objekt af denne klasse ved hjælp af konstruktøren for at se og bekræfte, hvordan toString()
-metoden transformerer objektet:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "male"); System.out.println(bob); Person alice = new Person("Alice", 17, "female"); System.out.println(alice); } } class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Class Person;" + System.lineSeparator() + "name = " + name + ";" + System.lineSeparator() + "age = " + age + ";" + System.lineSeparator() + "gender = " + gender + "." + System.lineSeparator(); } }
Vi kan se, at det nye objekt alice
vises i konsollen ved hjælp af den samme skabelon.
Konklusion
Ved at bruge toString()
-metoden har vi i høj grad forenklet processen med at vise objektinformation på skærmen, hvilket gør det muligt at spare plads i main-metoden.
1. Hvorfor har vi brug for toString()
-metoden?
2. Hvilken annotation skal bruges over toString()
-metoden?
Tak for dine kommentarer!