如何在 Arraylist< 中添加一个整数?扩展号码>?

How to add an Integer in Arraylist<? extends Number>?

我正在尝试使用扩展 Number Class 的通配符将 Integer 添加到 Arraylist。编译器给我一个错误。我不知道如何解决这个问题。

import java.util.ArrayList;

public class WildCard {
    ArrayList<? extends Number> an;

    public WildCard() {
        an = new ArrayList<Integer>();
    }

    public void addI(Integer a) {
        an.add(a);
    }

    public static void main(String[] args) {
        WildCard w = new WildCard();
        Integer b = 3;
        w.addI(b);
    }
}

就这样,你可以添加整数。

ArrayList<Number> an;

而不是

ArrayList<? extends Number> an

将通配符 ? 更改为 T:

public class Test <T extends Number> {
    ArrayList<T> an;

    public Test(){
        an = new ArrayList<T>();
    }

    public void addI(T a){
        an.add(a);
    }

    public static void main(String[]args){
        Test<Number> w = new Test<>();
        Integer b = 3;
        w.addI(b);

        Test<Integer> w2 = new Test<>();
        Integer b2 = 32;
        w2.addI(b2);
    }
}

不可能。

这就是通配符的意思。

你在问:“我如何找到这个圆的角?” - 或“如何移动不可移动的物体?”

通配符表示:无法添加到.

这个简单的练习突出了它的意思:

List<Double> doubles = new ArrayList<Double>();
List<? extends Number> whoknows = doubles;
whoknows.add(Integer.valueOf(5));

请注意 whoknowsdoubles 指向完全相同的列表。这里只有一个列表;您对 doubles 列表所做的任何操作也会对 whoknows 进行,反之亦然。

Soooo,如果您找到任何方法可以向其添加一个整数,那么您...只是...添加了一个整数。到双打名单。呃

这就是为什么你不能。