Latar Belakang
Semua objek Java memiliki toString()
metode, yang dipanggil ketika Anda mencoba dan mencetak objek.
System.out.println(myObject); // invokes myObject.toString()
Metode ini didefinisikan dalam Object
kelas (superclass dari semua objek Java). The Object.toString()
method mengembalikan string mencari cukup jelek, terdiri dari nama kelas, sebuah @
simbol dan kode hash dari objek dalam heksadesimal. Kode untuk ini terlihat seperti:
// Code of Object.toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Karena itu hasil seperti com.foo.MyType@2f92e0f4
itu dapat dijelaskan sebagai:
com.foo.MyType
- nama kelas, yaitu kelas yang ada MyType
dalam paket com.foo
.
@
- Menggabungkan string bersama
2f92e0f4
kode hash objek.
Nama kelas array terlihat sedikit berbeda, yang dijelaskan dengan baik di Javadocs untuk Class.getName()
. Misalnya, [Ljava.lang.String
berarti:
[
- array satu dimensi (sebagai lawan [[
atau [[[
dll.)
L
- array berisi kelas atau antarmuka
java.lang.String
- jenis objek dalam array
Menyesuaikan Output
Untuk mencetak sesuatu yang berbeda ketika Anda menelepon System.out.println(myObject)
, Anda harus menimpa para toString()
metode di kelas Anda sendiri. Berikut ini contoh sederhana:
public class Person {
private String name;
// constructors and other methods omitted
@Override
public String toString() {
return name;
}
}
Sekarang jika kita mencetak a Person
, kita melihat namanya daripada com.foo.Person@12345678
.
Ingatlah bahwa toString()
itu hanyalah salah satu cara bagi suatu objek untuk dikonversi menjadi string. Biasanya keluaran ini harus sepenuhnya menggambarkan objek Anda dengan cara yang jelas dan ringkas. Yang lebih baik toString()
untuk Person
kelas kita mungkin:
@Override
public String toString() {
return getClass().getSimpleName() + "[name=" + name + "]";
}
Yang akan mencetak, misalnya Person[name=Henry]
,. Itu adalah bagian data yang sangat berguna untuk debugging / pengujian.
Jika Anda ingin fokus hanya pada satu aspek objek Anda atau memasukkan banyak format jazzy, Anda mungkin lebih baik untuk mendefinisikan metode terpisah, misalnya String toElegantReport() {...}
.
Menghasilkan Output secara otomatis
Banyak IDE menawarkan dukungan untuk toString()
metode pembuatan-otomatis , berdasarkan bidang di kelas. Lihat dokumen untuk Eclipse dan IntelliJ , misalnya.
Beberapa perpustakaan Java populer juga menawarkan fitur ini. Beberapa contoh termasuk:
Mencetak kelompok objek
Jadi, Anda telah membuat yang bagus toString()
untuk kelas Anda. Apa yang terjadi jika kelas itu ditempatkan ke dalam array atau koleksi?
Array
Jika Anda memiliki array objek, Anda bisa menelepon Arrays.toString()
untuk menghasilkan representasi sederhana dari isi array. Misalnya, pertimbangkan berbagai Person
objek ini:
Person[] people = { new Person("Fred"), new Person("Mike") };
System.out.println(Arrays.toString(people));
// Prints: [Fred, Mike]
Catatan: ini adalah panggilan ke metode statis yang disebuttoString()
dalam kelas Array, yang berbeda dengan apa yang telah kita bahas di atas.
Jika Anda memiliki array multi dimensi , Anda dapat menggunakan Arrays.deepToString()
untuk mencapai jenis output yang sama.
Koleksi
Sebagian besar koleksi akan menghasilkan output yang cantik berdasarkan panggilan .toString()
pada setiap elemen.
List<Person> people = new ArrayList<>();
people.add(new Person("Alice"));
people.add(new Person("Bob"));
System.out.println(people);
// Prints [Alice, Bob]
Jadi, Anda hanya perlu memastikan elemen daftar Anda mendefinisikan yang bagus toString()
seperti yang dibahas di atas.