2010-01-05 5 views
2

J'essaie d'apprendre java mieux et j'ai une question.Fonction java - impression (collection c)?

Disons que j'ai deux collections, une ArrayList et une LinkedHashSet. Est-il possible de faire une fonction comme ceci:

void print(collection c) { 
    for (object tmp:c) { 
     System.out.println(tmp); 
    } 
} 
+2

Juste capitalisent Collection et objets, puis vous avez terminé. –

Répondre

7

Surveillez votre capitalisation:

private void printCollection(Collection collection) { 

    for (Object obj : collection) { 
     System.out.println(obj); 
    } 
} 
+1

Devrait être 'pour (obj Objet: c)' –

+1

secondes trop tard. Devrait être 'Collection ', et 'element' ou' e' au lieu de 'obj'. –

+1

Assurez-vous d'implémenter la méthode toString() – Brendan

2

Oui. ArrayList et LinkedHashSet sont deux collections. La méthode que vous avez écrite accepte une Collection (notez le C majuscule) de sorte qu'elle accepte tout type de collection. C'est ce qu'on appelle le polymorphisme.

-2

, fondamentalement, vous avez juste besoin ot utiliser l'itérateur:

void print(collection c) 
{ 
    for (object tmp:c.iterator()) 
    { 
     System.out.println(tmp); 
    } 
} 
+3

En Java, les itérateurs ne sont pas itérables. Vous ne pouvez utiliser que pour chacun sur des itérations, pas sur des itérateurs. –

+0

ack, vrai. mais qui était le génie qui a décidé cela? :) –

1

Il est possible, car les deux types mettre en œuvre Collection<E>. La convention est pour les types de classe en Java pour commencer avec une lettre majuscule. Depuis la version 1.5, Java a utilisé generics pour ses collections et vous devriez les utiliser dans tout nouveau code. Puisque vous utilisez la boucle for de style 1.5, vous devez écrire du code générique.

Il est généralement préférable de faire en sorte que les fonctions fonctionnent sur le type le moins spécifique possible, car cela permet une réutilisation la plus large possible. Dans ce cas, vous n'avez besoin que de quelque chose qui peut aller de Collection<T> à Iterable<T>, car vous n'avez besoin que de quelque chose qui fonctionnera avec la boucle for. Ainsi, la combinaison des médicaments génériques et moins la puissance donne:

public class PrintLinePrinter { 
    public <T> void print (Iterable<T> collection) { 
     for (T item : collection) { 
      System.out.println(item); 
     } 
    } 
} 
+1

Le 'T' est inutile. faites juste 'public void print (Iterable collection)' et changez 'T item' en 'Object item' – user102008

1

System.out.println (Collection c) imprimer déjà tout type de collection dans un format lisible. Toutefois, si la collection contient des objets définis par l'utilisateur, vous devez implémenter toString() dans la classe définie par l'utilisateur.

0

'sans boucle' solution:

void print(collection c) { 
    System.out.println(Arrays.toString(c.toArray())); }