我最近开始在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
类型的项目添加到列表中。你看到问题了吗?