Как передать ArrayList в метод, который принимает коллекцию в качестве входных данных - PullRequest
2 голосов
/ 06 мая 2010

Я хочу передать ArrayList<Integer> X в метод a(Collection<Integer> someCol), который принимает Collection<Integer> в качестве ввода.

Как я могу это сделать? Я думал, что ArrayList - это Collection, и поэтому я должен быть в состоянии «просто сделать это», но кажется, что Collection - это интерфейс, и ArrayList реализует этот интерфейс. Есть ли что-то, что я могу сделать, чтобы заставить эту работу ... если вы понимаете теорию, которая также поможет мне и, возможно, многим другим людям.

Спасибо

Ответы [ 2 ]

9 голосов
/ 06 мая 2010

Просто сделай это.

Серьезно, класс будет неявно приведен к интерфейсу, для которого он реализует.

Редактировать
На случай, если вам нужен пример:

import java.util.*;

public class Sandbox {
    public static void main(String[] args) {
        final ArrayList<Integer> list = new ArrayList<Integer>(5);
        Collections.addAll(list, 1, 2, 3, 4, 5);
        printAll(list);
    }

    private static void printAll(Collection<Integer> collection) {
        for (Integer num : collection)
            System.out.println(num);
    }
}
4 голосов
/ 06 мая 2010

class ArrayList<E> implements List<E> и interface List<E> extends Collection<E>, поэтому ArrayList<Integer> is-a Collection<Integer>.

Это то, что называется "подтипом".

Заметьте, однако, что, хотя Integer extends Number, List<Integer> - это не-не List<Number>. Это, однако, List<? extends Number>. То есть дженерики в Java инвариантны; это не ковариант.

Массивы, с другой стороны, являются ковариантными. Integer[] is-a Number[].

Ссылки

Похожие вопросы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...