3

以下の Java コードでは:

import java.util.*;

public class TestGenericMethod {

public static <E> void ArrayToArrayList(E[] a, ArrayList<E> lst) {
    for (E e : a) lst.add(e);
}

public static void main(String[] args) {
    ArrayList<Integer> lst = new ArrayList<Integer>();
    Integer[] intArray = {55, 66};  // autobox
    ArrayToArrayList(intArray, lst);

    for (Integer i : lst) System.out.println(i);    
    String[] strArray = {"one", "two", "three"};

    //ArrayToArrayList(strArray, lst);   // Compilation Error
}
}

コンパイラがこの行をどのように認識しているのか、誰かが説明してくれますか?

ArrayToArrayList(strArray, lst);

例外をスローしますか?

メソッドがジェネリック型のデータを受け入れる場合、整数配列を受け入れるのに文字列配列を受け入れないのはなぜですか?

4

2 に答える 2

5

これは、配列と同じ型のArrayToArrayList配列リスト( )を想定しているため、コンパイルされません。E

public static <E> void ArrayToArrayList(E[] a, ArrayList<E> lst) {

コメントアウトされた例は、配列 ofStringArrayListofでそれを呼び出そうとしますInteger

以下はコンパイルします:

      String[] strArray = {"one", "two", "three"};
      ArrayList<String> strLst = new ArrayList<String>();
      ArrayToArrayList(strArray, strLst);
于 2012-11-27T22:35:21.027 に答える
2
public static <E> void ArrayToArrayList(E[] a, ArrayList<E> lst)

このメソッドでは、ArrayList渡される型は配列の型と同じ型でなければなりません(E)

したがって、 を渡す場合は、両方に同じタイプを使用しているため、ArrayList<Integer>を渡す必要があります。Integer[]E

この呼び出しでは: -

ArrayToArrayList(strArray, lst);

あなたlstのタイプはArrayList<Integer>であり、あなたのタイプstrArrayString[]であるため、type mismatch.

于 2012-11-27T22:34:54.820 に答える