5

> Integer が抽象クラス Number の拡張クラスであっても、なぜList<Number>not で呼び出すことができないのだろうと思っていました。List<Integer整数でもパラメーター Number を使用してメソッドを呼び出すことができるため、論理エラーがあります。

public class Que
{

public void enterNumbers(List<Number> nummern)
{
    for (Number number : nummern)
    {
        System.out.println(number + "\n");
    }
}

public void enterNum(Number num)
{
    System.out.println("This is a number " + num);
}

public static void main(String[] args)
{
    Que que = new Que();

    Integer myInteger = new Integer(7);
    // possible (of course!)
    que.enterNum(myInteger);

    List<Integer> num = new ArrayList<Integer>();
    num.add(4);
    num.add(45);
    Integer inte = new Integer(333);

    num.add(inte);
    // not possible ! 
    que.enterNumbers(num);
}
}

それを解決するために、私は協力することができましたList<?>...List<? extends Number>だから、正確な理由を知りたい解決策は必要ありません。

リストについて考えることができる唯一の解決策は、数値を新しいタイプのデータ構造としてバインドすることです。

4

2 に答える 2

11

Numberたとえば、 toの別のサブクラスのインスタンスList<Number>、たとえば type のオブジェクトDoubleを追加することはできますが、それらを に追加することは明らかに許可されるべきではありませんList<Integer>

public void myMethod(List<Number> list) {
    list.add(new Double(5.5));
}

myMethodthisのインスタンスで呼び出すことが許可されている場合、 が呼び出されList<Integer>たときに型の衝突が発生しaddます。

于 2013-08-29T14:44:32.740 に答える