我最近开始在Java中使用泛型,并且在这种尝试中尝试重构我们团队的现有代码。

谁能告诉我以下内容有什么问题-

private ArrayList<? extends WorkTabPane> workTabPanes = null;
protected <T extends WorkTabPane> void addPane(T pane) {
    workTabPanes.add(pane);
}

Eclipse在第3行(添加时)指示错误-“ArrayList类型中的方法add(capture#1-of?扩展WorkTabPane)不适用于参数(T)”

最佳答案

我相信你想拥有

private ArrayList<WorkTabPane> workTabPanes = null;
protected void addPane(WorkTabPane pane) {
    workTabPanes.add(pane);
}

(您仍然可以将WorkTabPane的子类添加到列表中。)

eclipse抱怨的原因如下:通过编写<? extends WorkTabPane>,您说“这是碰巧扩展WorkTabPane的某些特定类的列表”。例如,此变量可以包含对ArrayList<WorkTabPaneSubclass1>的引用。但是,如果是这种情况,则不应允许您将WorkTabPaneSubclass2类型的项目添加到列表中。你看到问题了吗?

10-04 23:34