Sınıfta toString()tanımlanan yöntem kavramını bana açıklayan var Objectmı? Nasıl kullanılır ve amacı nedir?
Sınıfta toString()tanımlanan yöntem kavramını bana açıklayan var Objectmı? Nasıl kullanılır ve amacı nedir?
Yanıtlar:
Gönderen Object.toStringdocs:
Nesnenin dize gösterimini döndürür. Genel olarak,
toStringyöntem bu nesneyi "metin olarak temsil eden" bir dize döndürür. Sonuç, bir kişinin okuması kolay olan kısa ama bilgilendirici bir sunum olmalıdır. Tüm alt sınıfların bu yöntemi geçersiz kılması önerilir.
toStringSınıfı için bir yöntemObjectnesnesi bir örneği, en işareti karakter 'olduğu sınıf adına oluşan bir dizi @ ve nesnenin karma kod işaretsiz onaltılık döndürür. Başka bir deyişle, bu yöntem şunun değerine eşit bir dize döndürür:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Misal:
String[] mystr ={"a","b","c"};
System.out.println("mystr.toString: " + mystr.toString());
output:- mystr.toString: [Ljava.lang.String;@13aaa14a
Aşağıdakilerin kullanımı String.toString:
StringFormda değer adı verilen kurucuyu keşfetmeniz gerektiğinde , basitçe kullanabilirsiniz String.toString... bir örnek için ...
package pack1;
import java.util.*;
class Bank {
String n;
String add;
int an;
int bal;
int dep;
public Bank(String n, String add, int an, int bal) {
this.add = add;
this.bal = bal;
this.an = an;
this.n = n;
}
public String toString() {
return "Name of the customer.:" + this.n + ",, "
+ "Address of the customer.:" + this.add + ",, " + "A/c no..:"
+ this.an + ",, " + "Balance in A/c..:" + this.bal;
}
}
public class Demo2 {
public static void main(String[] args) {
List<Bank> l = new LinkedList<Bank>();
Bank b1 = new Bank("naseem1", "Darbhanga,bihar", 123, 1000);
Bank b2 = new Bank("naseem2", "patna,bihar", 124, 1500);
Bank b3 = new Bank("naseem3", "madhubani,bihar", 125, 1600);
Bank b4 = new Bank("naseem4", "samastipur,bihar", 126, 1700);
Bank b5 = new Bank("naseem5", "muzafferpur,bihar", 127, 1800);
l.add(b1);
l.add(b2);
l.add(b3);
l.add(b4);
l.add(b5);
Iterator<Bank> i = l.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
}
... bu programı Eclipse'inize kopyalayın ve çalıştırın ... hakkındaki fikirleri alacaksınız String.toString...
toStringbunun amaçlanmadığını ve kullanıcı arayüzü amaçlarına uygun olmadığını biliyorsunuzdur .
toStringGUI'de bir nesneyi görüntülemek için kullandığını açıklayın ? Zengin bir nesnem varsa ve onu bir GUI'de göstermek istiyorsam, o zaman hayır, onun için fazladan bir oluşturucu oluşturmam veya GUI'de kullanmak için nesneden bir dize özelliği çıkarmam, onu saklarım toStringtüm bu ek yüklerin üstesinden gelebilmek için basit ve gerçek . Bunu daha temiz bir şekilde yapmak istiyorsanız, UI amaçlarına ayrılmış bir sarmalayıcı sınıfı oluşturun ve bunun toStringyöntemini wrappee'nin bir dize özelliğini döndürmek için uygulayın.
toString()Yöntem, bir döner metinsel bir nesnenin temsil. Temel bir uygulama zaten dahil edilmiştir java.lang.Objectve bu nedenle tüm nesneler java.lang.Objectondan miras aldığından, Java'daki her nesnenin bu yönteme sahip olması garanti edilir.
Yöntemin geçersiz kılınması, özellikle hata ayıklama söz konusu olduğunda her zaman iyi bir fikirdir, çünkü hata ayıklayıcılar genellikle nesneleri toString()yöntemin sonucuna göre gösterir . Bu yüzden anlamlı bir uygulama kullanın, ancak bunu teknik amaçlar için kullanın . Uygulama mantığı alıcıları kullanmalıdır:
public class Contact {
private String firstName;
private String lastName;
public Contact (String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {return firstName;}
public String getLastName() {return lastName;}
public String getContact() {
return firstName + " " + lastName;
}
@Override
public String toString() {
return "["+getContact()+"]";
}
}
İsteğe bağlı olarak bir uygulama bağlamında kullanımlara sahip olabilir, ancak çok daha sık olarak hata ayıklama amacıyla kullanılır. Örneğin, bir IDE'de bir kesme noktasına ulaştığınızda, anlamlı toString()bir nesneyi okumak , üyelerini incelemekten çok daha kolaydır .
Bir toString()yöntemin ne yapması gerektiğine dair belirli bir gereklilik yoktur. Kural olarak, çoğu zaman size sınıfın adını ve ilgili veri üyelerinin değerini söyleyecektir. Çoğu zaman, toString()yöntemler IDE'lerde otomatik olarak oluşturulur.
Bir toString()yöntemden belirli çıktılara güvenmek veya onu bir program içinde ayrıştırmak kötü bir fikirdir. Ne yaparsan yap, o yoldan gitme.
toString () , nesnenin bir dize / metin gösterimini döndürür. Genellikle hata ayıklama, günlük kaydı vb. Gibi teşhis amaçları için kullanılan toString () yöntemi, nesne hakkında anlamlı ayrıntıları okumak için kullanılır.
Nesne println, print, printf, String.format (), assert veya dize birleştirme operatörüne iletildiğinde otomatik olarak çağrılır.
Object sınıfındaki toString () öğesinin varsayılan uygulaması, bu nesnenin sınıf adını ve ardından @ işaretini ve aşağıdaki mantığı kullanarak bu nesnenin karma kodunun işaretsiz onaltılı temsilini içeren bir dize döndürür:
getClass().getName() + "@" + Integer.toHexString(hashCode())
Örneğin, aşağıdaki
public final class Coordinates {
private final double x;
private final double y;
public Coordinates(double x, double y) {
this.x = x;
this.y = y;
}
public static void main(String[] args) {
Coordinates coordinates = new Coordinates(1, 2);
System.out.println("Bourne's current location - " + coordinates);
}
}
baskılar
Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader
Şimdi, aşağıdaki gibi Koordinatlar sınıfında toString () geçersiz kılınarak,
@Override
public String toString() {
return "(" + x + ", " + y + ")";
}
sonuçlanır
Bourne's current location - (1.0, 2.0) //concise and informative
Yöntem, bu nesnelere referanslar içeren koleksiyonlarda çağrıldığında, toString () öğesini geçersiz kılmanın faydası daha da artar. Örneğin, aşağıdaki
public static void main(String[] args) {
Coordinates bourneLocation = new Coordinates(90, 0);
Coordinates bondLocation = new Coordinates(45, 90);
Map<String, Coordinates> locations = new HashMap<String, Coordinates>();
locations.put("Jason Bourne", bourneLocation);
locations.put("James Bond", bondLocation);
System.out.println(locations);
}
baskılar
{James Bond=(45.0, 90.0), Jason Bourne=(90.0, 0.0)}
bunun yerine,
{James Bond=Coordinates@addbf1, Jason Bourne=Coordinates@42e816}
Birkaç uygulama işaretçisi,
Döndürülen dizede bulunan tüm örnek alanları için erişimciler / alıcılar sağlayın. Örneğin, Koordinatlar sınıfında,
public double getX() {
return x;
}
public double getY() {
return y;
}ToString () yönteminin kapsamlı bir kapsamı kitabın 10. Maddesi olan Effective Java ™, Second Edition, Yazan Josh Bloch'da yer almaktadır.
Kodlama:
public class Test {
public static void main(String args[]) {
ArrayList<Student> a = new ArrayList<Student>();
a.add(new Student("Steve", 12, "Daniel"));
a.add(new Student("Sachin", 10, "Tendulkar"));
System.out.println(a);
display(a);
}
static void display(ArrayList<Student> stu) {
stu.add(new Student("Yuvi", 12, "Bhajji"));
System.out.println(stu);
}
}
Student.java:
public class Student {
public String name;
public int id;
public String email;
Student() {
}
Student(String name, int id, String email) {
this.name = name;
this.id = id;
this.email = email;
}
public String toString(){ //using these toString to avoid the output like this [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
return name+" "+id+" "+email;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email=email;
}
}
Çıktı:
[Steve 12 Daniel, Sachin 10 Tendulkar]
[Steve 12 Daniel, Sachin 10 Tendulkar, Yuvi 12 Bhajji]
Pojo (Student.java) sınıfında toString () 'e alışkın değilseniz, [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]toString () yöntemini kullandığımız bu tür sorunlardan kaçınmak için.
Bir String bağlamında bir Nesneye (bir Dize olmayan) her eriştiğinizde, toString () derleyici tarafından kapakların altında çağrılır.
Bu nedenle
Map map = new HashMap();
System.out.println("map=" + map);
çalışır ve kendi sınıflarınızda Object'ten standart toString () öğesini geçersiz kılarak, nesnelerinizi String bağlamlarında da yararlı hale getirebilirsiniz.
(ve bunu bir kara kutu olarak kabul edin! İçeriği asla bir insana sunmaktan başka bir şey için kullanmayın)
/**
* This toString-Method works for every Class, where you want to display all the fields and its values
*/
public String toString() {
StringBuffer sb = new StringBuffer();
Field[] fields = getClass().getDeclaredFields(); //Get all fields incl. private ones
for (Field field : fields){
try {
field.setAccessible(true);
String key=field.getName();
String value;
try{
value = (String) field.get(this);
} catch (ClassCastException e){
value="";
}
sb.append(key).append(": ").append(value).append("\n");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return sb.toString();
}
Önce Python sonra Java öğrenirseniz. Ben aynı rol oynar düşünüyorum __str__()Python yöntemle, bir olan sihirli yöntemi gibi __dict__()ve __init__()fakat nesneyi temsil eden bir dize başvurmak için.