Java | 向List<?>添加项目

3

我在Google上查找了一下,但是并没有真正理解如何做到这一点。我正在尝试像这样向列表中添加项目:List<?>。我的代码大致如下:

public class Test {
    private List<?> list;

    public Test(List<?> useThisList) {
        this.list = useThisList;
    }

    public void add(Object add) {
        this.list.add(add); // this won't compile
    }
}

然而,正如评论中所述,那段代码无法编译。我尝试将其更改为类似以下内容的代码:
public void add(? add) {
    this.list.add(add);
}

但是由于更加明显的原因,它无法编译。有没有人知道我需要更改什么才能使其正常工作?提前感谢!

顺便说一句,当它真正起作用时,您应该能够这样做:

List<String> list = new ArrayList<String>();
new Test(list).add("hello");

2
如果你不知道你有哪种类型的列表,你怎么知道可以将 add 添加到其中?也许你的 Test 类应该是泛型的... - Jon Skeet
我建议您阅读Joshua Blochs的《Effective Java第二版》,并参考有关泛型的条目。它提供了许多关于如何很好地使用泛型/通配符的见解。 - Louis F.
1个回答

5
使你的 Test 类变成泛型类
public class Test<E> {
    private List<E> list;

    public Test(List<E> useThisList) {
        this.list = useThisList;
    }

    public void add(E add) {
        this.list.add(add); // this will compile
    }
}

像这样实例化您的测试类:

Test<String> t = new Test<String>(new ArrayList<String>());
t.add("Something");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接