функция Java - печать (коллекция c)? - PullRequest
2 голосов
/ 05 января 2010

Я пытаюсь выучить Java лучше, и у меня есть один вопрос.

Допустим, у меня есть две коллекции: ArrayList и LinkedHashSet. Можно ли сделать такую ​​функцию:

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

Ответы [ 6 ]

7 голосов
/ 05 января 2010

Следите за своей капитализацией:

private void printCollection(Collection collection) {

   for (Object obj : collection) {
      System.out.println(obj);
   }
}
2 голосов
/ 05 января 2010

Да.ArrayList и LinkedHashSet являются коллекциями.Метод, который вы написали, принимает коллекцию (обратите внимание на заглавную C), поэтому он принимает любой тип коллекции.Это называется полиморфизмом.

1 голос
/ 08 сентября 2010

System.out.println (Коллекция c) уже печатает любой тип коллекции в удобочитаемом формате. Но если коллекция содержит определенные пользователем объекты, то вам нужно реализовать toString () в определенном пользователем классе.

1 голос
/ 05 января 2010

Возможно, так как оба типа реализуют Collection<E>. Соглашение для типов классов в Java должно начинаться с заглавной буквы. Начиная с 1.5, Java использовала generics для своих коллекций, и вы должны использовать их во всем новом коде. Поскольку вы используете цикл for в стиле 1.5, вы должны написать общий код.

Обычно лучше сделать так, чтобы функции работали с наименее конкретным типом, насколько это возможно, так как это дает самое широкое повторное использование. В этом случае вам нужно только то, что может подняться с Collection<T> до Iterable<T>, поскольку вам нужно только то, что будет работать с циклом for. Таким образом, сочетание дженериков и наименьшей мощности дает:

public class PrintLinePrinter {
    public <T> void print (Iterable<T> collection) { 
        for (T item : collection) {
            System.out.println(item); 
        }
    } 
} 
0 голосов
/ 08 сентября 2010

' Решение без петель ':

void print(collection c) {
    System.out.println( Arrays.toString(c.toArray())); }
0 голосов
/ 05 января 2010

В основном вам просто не нужно использовать итератор:

void print(collection c) 
{ 
    for (object tmp:c.iterator()) 
    { 
        System.out.println(tmp); 
    } 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...