toString() metodu, Java'daki Object sınıfının standart bir metodudur ve bir nesnenin string temsiline erişim sağlar. Tarihsel olarak, hata ayıklama ve günlük kaydı sırasında, nesnenin teknik bilgilerini (SınıfAdı@hashCode) çıkarmak yerine anlamlı, okunabilir bir tanım elde etmek için eklenmiştir.
İlk başta, toString() yeniden tanımlanmadığında, metod sınıf_adı@hashkod biçiminde bir string döndürür. Bu, nesnenin durumunu anlamak veya çıkarmak için rahatsız edicidir. Bu nedenle, toString()'ın yeniden tanımlanması iyi bir uygulama haline gelmiştir.
Açık bir toString() uygulaması olmadan, nesnelerin hata ayıklanması ve günlük kaydı zorlaşır. İç yapısını veya alanların mevcut değerlerini bilmeden, nesnede ne bulunduğunu anlamak zorlaşır.
Doğru bir şekilde toString()'ı yeniden tanımlamak:
Kod örneği:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } }
Anahtar özellikler:
toString() metodunu her sınıfta daima yeniden tanımlamak zorunlu mu?
Hayır, zorunlu değildir ama günlük kaydı veya hata ayıklamada sıkça kullanılan nesne sınıflarında yeniden tanımlamak son derece önerilirdir.
toString() metodu istisna fırlatabilir mi?
Teknik olarak – evet, eğer metod içinde, örneğin, bir alana erişirken NullPointerException meydana gelirse. Ancak iyi bir uygulama, bu durumu önlemek ve toString() her zaman doğru bir string döndürmesini sağlamaktır.
toString() çağrısı açıkça zorunlu mu?
Hayır, derleyici onu bir nesne ile stringin birleştirilmesi veya nesnenin System.out.println ile çıkışı sırasında örtük olarak çağırır.
Person p = new Person("Ivan", 25); System.out.println(p); // Otomatik olarak p.toString() çağrısını gerçekleştirecek
Programcı, User sınıfında toString()'ı yeniden tanımlamaz ve günlük kaydına yazar:
log.info(user);
Artılar:
Eksiler:
User@1a2b3c biçiminde bir string alır, kullanıcı hakkında bilgi yoktur.Programcı toString()'ı yeniden tanımlar:
@Override public String toString() { return "User{name='" + name + "', id=" + id + "}"; }
Artılar:
Eksiler: