2016-04-09 1 views
0
public static <T> void print(Collection<T> l) 

Wenn ich eine Sammlung habe, enthaltend a, b und c I der AusgangA Generisches Class "print", das das Element in einer Objektsammlung druckt

[a,b,c] 

und wenn sie leer sein will ich will es zu sein

[] 

Mein Code jetzt.

public class CollectionOps { 
public static <E, T extends Iterable<E>> void print(T a){ 
    //for(Iterable type Iterable element : collection) 
    for (E x : a) { 
     System.out.print(x); 

    } 

} 
public static void main(String[] args){ 
    ArrayList<String> a = new ArrayList<String>(); 
    a.add("a"); 
    a.add("b"); 
    a.add("c"); 
    print(a); 
} 

}

Ausgang: abc

Vielleicht könnte ich System.out.printf() verwenden, irgendwie?

Antwort

2

Normalerweise überschreiben Auflistungsklassen toString, um genau diesen Ausgang zu erzeugen. Deshalb, wenn Sie einen Collection haben, können Sie nur tun

System.out.println(collection); 

Dies funktioniert, weil println Anrufe toString.

Wenn Sie eine Iterable in dieser Form drucken möchten, würde ich es nur eine Sammlung machen.

List<Object> list = new ArrayList<>(); 
for (Object o : iterable) 
    list.add(o); 
System.out.println(list); 

Beachten Sie auch, dass Sie Ihre Methodensignatur verbessern können, indem Sie einen Platzhalter verwenden.

public static void print(Iterable<?> iterable) 
+0

Ich möchte mein eigenes toString @ Paul Boddington machen – JohnBanana

0

Die meisten Java-Sammlungen (List, Set, Warteschlange, etc ') implementieren toString Methode genau so, wie Sie es wollen. Warum also nicht einfach benutzen?

public static void main(String[] args) { 
    print(Arrays.asList('a','b','c')); 
    print(new ArrayList()); 
    print(new HashSet<>(Arrays.asList("a","b","c"))); 
    print(new HashSet()); 
    print(new PriorityQueue<>(Arrays.asList(1,2,3))); 
    print(new PriorityQueue<>()); 
} 

public static <T> void print(Collection<T> l){ 
    System.out.println(l); 
} 

Ausgang:

[a, b, c] 
[] 
[a, b, c] 
[] 
[1, 2, 3] 
[]