2

入力として受け取るメソッドにArrayList<Integer>Xを渡したいと思います。a(Collection<Integer> someCol)Collection<Integer>

これどうやってするの?ArrayList は Collection だと思ったので、「それを行うだけ」できるはずですが、Collection はインターフェイスであり、ArrayList はこのインターフェイスを実装しているようです。この作業を行うために私にできることはありますか...理論を理解していれば、私や他の多くの人にも役立つでしょう。

ありがとう

4

2 に答える 2

10

早くやれよ。

真剣に、クラスはそれが実装するインターフェースに暗黙的にキャストします。

編集
例が必要な場合:

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);
    }
}
于 2010-05-06T05:16:47.387 に答える
4

class ArrayList<E> implements List<E>そしてinterface List<E> extends Collection<E>、だからArrayList<Integer>is-a Collection<Integer>

これが「サブタイピング」と呼ばれるものです。

ただし、 であってもInteger extends Numberaは aList<Integer>ではないことに注意してくださいList<Number>。しかし、それはList<? extends Number>. つまり、Java のジェネリックは不変です。それは共変ではありません。

一方、配列は共変です。Integer[]であるNumber[]

参考文献

関連する質問

于 2010-05-06T05:23:20.610 に答える