2013-08-08 24 views
9

Java'da bir ArrayList için toString() yönteminin kendi uygulamasına sahip olmak isterim. Ancak, benim toString() 'i ArrayList içeren sınıfa eklesem de çalışmamı sağlayamıyorum. Java'da bir ArrayList'in toString yöntemini nasıl geçersiz kılabilirim?

@Override 
public String toString() { 
    String result = "+"; 
    for (int i = 0; i < list.size(); i++) { 
     result += " " + list.get(i); 
    } 
    return result; 
} 

bu list.toString() gibi benim ArrayList diyoruz

, hala varsayılan temsilini olsun. Bir şey mi eksik?

cevap

5

Sen

public static String listToString(List<?> list) { 
    String result = "+"; 
    for (int i = 0; i < list.size(); i++) { 
     result += " " + list.get(i); 
    } 
    return result; 
} 

böyle bir şey yapmak ve listToString() bir argüman olarak listeyi geçmelidir. ürününü ArrayList (anonim bir sınıfla veya bir betonla birlikte) teknik olarak genişletebilir ve toString'u kendiniz uygulayabilirsiniz, ancak bu burada gereksiz görünüyor.

import java.util.ArrayList; 

public class MyArrayList extends ArrayList { 
    private static final long serialVersionUID = 1L; 

    @Override 
    public String toString() { 
     String result = "+"; 
     for (int i = 0; i < this.size(); i++) { 
      result += " " + this.get(i); 
     } 
     return result; 
    } 
} 
+5

Ayrıca, burada "String" yerine 'StringBuilder' kullanarak bir performans artışı elde edebilirsiniz. –

7

ArrayList 'un toString yöntemini geçersiz kılabilirsiniz. Bunun yerine, bir ArrayList'u String'a istediğiniz/gereksinim duyduğunuz şekilde dönüştüren bir yardımcı program sınıfı kullanabilirsiniz. Başka bir alternatif ise Arrays.deepToString(yourList.toArray()) kullanıyor olabilir.

//List<String> list 
System.out.println(String.join(",", list)); 

Yoksa varsa List<Whatever>: Java 8 Kullanılması

, bu çok kolay bir şekilde yapılabilir

System.out.println(
    list.stream() 
     .map(Whatever::getFieldX()) 
     .collect(Collectors.joining(", ")) 
); 

Ben ArrayList veya benzeri uzanan karşı, hâlâ teknik olarak mümkündür ancak Bunu iyi bir seçenek olarak görmüyorum.


Eğer ArrayList uzatmak ve toString geçersiz ancak genellikle bu harika bir fikir değil olabilir. Daha bilgi:

+1

"ArrayList" son mu? ArrayList'i genişletemez ve 'toString()' yi geçersiz kılamaz mısınız? –

+1

@SteveP. cevap güncellendi. –

9
ArrayList<String> list = new ArrayList<String>() 
{ 
    private static final long serialVersionUID = 1L; 

    @Override public String toString() 
    { 
     return super.toString(); 
    } 
}; 
+6

Bu yaklaşımın dezavantajı, 'ArrayList' öğesini her istediğinizde/ihtiyacınız olduğunda = \ anonim bir uygulama oluşturmanız gerektiğidir. –

+0

Sadece bir kez ihtiyacım varsa, ... – sashok724

+3

Eğer gerçekten bir kez ihtiyacınız varsa, gerçekten yararlı olmaz. \. –

6

ArrayList'deki uzanan bir sınıf yazmak gerekir , 2, 9, 1, 7]

+1

Diğer kullanıcıların da ondan öğrenmeye çalıştığı gibi küçük örnek kodlar için bile Java adlandırma kurallarına uymak iyi bir şeydir. Burada, sınıf adı büyük harfle başlamalıdır. Ayrıca, "Liste" kelimesini sınıf adına eklemek de iyi olacaktır. – Puce

+0

@Puce Bir büyük harfle başladım, fakat evet sağ taraftaki sınıfın en iyisi değildim. –

+0

@ user2426316 bu size yardımcı oldu mu? –

0

toString (geçersiz kılmak için) ArrayList tamsayı dizisi için:

class MyArrayList extends ArrayList<Integer> { 
    private static final long serialVersionUID = 1L; 
    @Override public String toString() { 
     String output = ""; 
     for (int i = 0 ; i < this.size(); i++) 
      output = Integer.toString(this.get(i)); 
     return output; 
     } 
    } 

ArrayList<Integer> list = 
    new ArrayList<>(Arrays.asList(5, 4, 2, 9, 1, 7)); 
System.out.print("list = " + list); 

oluşturur: liste = [5, 4

0

Yeni oluşturulmuş bir sınıfta toString yöntemini geçersiz kılabilirsiniz, ancak oluşturulan sınıfın genişletildiğinden emin olmalısınız. ArrayList. Ardından, toString yöntemini geçersiz kılabilirsiniz. Bu, IS ilişkisine dayanmaktadır. Yeni oluşturulan sınıf bir ArrayList türüdür.

Ayrıca HAS ilişkisine dayanan bir ArrayList de oluşturabilirsiniz. Bu durumda, string'i overString yöntemi yerine döndürmek için başka bir yöntem yazmanız gerekir.

İlgili konular