2011-01-21 18 views
5
class Address 
{ 
    private enum Component 
    { 
    NUMBER, 
    STREET, 
    STATE, 
    COUNTRY 
    } 

    private Map<Component, String> componentToValue = ...; 
} 

Ben iki yöntemi içerecek şekilde benim sınıf istiyorum:toString(): hata ayıklama veya insanlar için?

  1. biri (bir şey yanlış giderse ben debug) her adres bileşeninin değerini gösterir.
  2. Adres, insanlar tarafından beklenen bir formda dönmek üzere: "1600 Amphitheatre Parkway Mountain View, CA 94043".

Object.toString() için en iyi uygulama nedir? Birincisi # 1 veya # 2 için mi? Bu yöntemlerin adlandırılması için en iyi yöntem var mı? Tabii

public String toString(boolean debug) { 
    if (debug) return debugStringVersion; 
    else return humanVersion; 
} 

public String toString() { 
    return toString(Util.DEBUG); 
} 

bu Eğer içinde bir hata ayıklama bayrağıyla bir yardımcı sınıf Suet kadar olduğunu varsayar: Yapabileceğiniz

cevap

13

ile gitmek? İngilizce, Fransızca ve Japonca ile aynı şekilde biçimlendirir misiniz?

Hayır, o zaman cevabınızı alırsınız: sunum nesneye ait değil, nesneyi gösteren sunum katmanına aittir. Nesne özellikle sunum katmanı için oluşturulmadıkça, örneğin bir HtmlI18nedAddress ise, hata ayıklama için toString kullanın.

vs SimpleDateFormat adresinden Date'u düşünün. Date durumu ve SimpleDateFormat çoklu gösterimleri döndürür.

+1

SimpleDateFormat vs Date'den (veya başka bir ilgili örnek) bahsederseniz, bu cevabı kabul edildi olarak işaretleyeceğim. – Gili

-1

Bir şey istediğiniz gibi bunu değiştirmek için bir hata ayıklama bayrağı kullanmaktır.

+3

Bu benim için bir anlam ifade etmiyor mu? Debuging sırasında dönüş değerini değiştirirse, üretken kodda toString() kullanımı ne olmalıdır? – lweller

+0

@lweller. Bunu her zaman yapamazsın. Ama bazen çok yardımcı olabilir. – jjnguy

3

İlkini söyleyebilirim. Veri formatlama, nesnenin ToString() işlevine kodlanmış olmamalıdır.

Şu şekilde bakıyorum: Eşleşen Parse (string data) işlevi tarafından okunabilen ToString() çıktı verisini yapmaya çalışıyorum (bu işlev gerçekten mevcutsa veya önemli değilse). Bu durumda, belirli bir biçimlendirme istiyorsanız, belirli bir işlevi yazın ve genel veri döküm yordamlarını ToString() öğesine bırakın.

0

dinamik .: yapılandırmak bazı hata ayıklama özelliğinden okuyabilir

@Override 
public String toString() { 

    if(debug) { 
     return debugAddrString() 
    } 
    return normalAddrString(); 

} 
+0

Görüyorum ki yumrukla dövüldüm! –

+1

bu benim için anlamlı değil mi? Debuging sırasında dönüş değerini değiştirirse, üretken kodda toString() kullanımı ne olmalıdır? – lweller

+0

Bir C 'tanımı 'benzetimi gibi görünüyor. – helpermethod

-1

Javadoc diyor: Genel olarak

, "metin olarak temsil eden" bir dize döndürür toString metodu bu nesne sonucu, kısa bir kişinin okuması kolay ve bilgilendirici bir gösterimi olmalıdır.

Demek bir SMS mesajının ve bir HTML sayfası aynı şekilde bir adres biçimlendirmek misiniz 2.

+4

Evet, sanırım bu, nesnenin "metinsel olarak temsil edildiğini" sanmıyorum, ama (aklımda) soru "ne amaçla"? Ve asıl amacın hata ayıklama amaçlı olduğunu düşünüyorum. –

0

ToString genellikle yalnızca hata ayıklama bilgisi için kullanılmalıdır.Object'da bir yöntemi geçersiz kıldığınızı unutmayın; Bir Object referans geri dönüşü için insan tarafından okunabilir bir adrese bir yöntem çağrısı yapmak için kavramsal olarak doğru mu? Bazı durumlarda, projeye bağlı olarak, bu aslında mantıklı olabilir, ama bana biraz garip geliyor. Yeni bir yöntem uygulardım. Dikkat edilmesi gereken diğer bir nokta da, modern IDE'lerin, bunları denetlerken nesneler hakkında hata ayıklama bilgisi yazdırmak için ToString yöntemini kullanmasıdır.

+0

IBTD. Bir 'StringBuilder' ilk cümleniz hakkında ne söylüyor? '.toString()' gerçekten sadece hata ayıklama için mi? – glglgl

İlgili konular