查询java中的泛型

ksh*_*ghl 4 java generics

我最近开始在java中使用泛型,并尝试重构我们团队的现有代码.

任何人都可以告诉我以下有什么问题 -

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

Eclipse在第3行表示错误(在添加时) - "类型ArrayList中的方法add(捕获#1-of?extends WorkTabPane)不适用于参数(T)"

aio*_*obe 8

我相信你想拥有

private ArrayList<WorkTabPane> workTabPanes = null;
protected void addPane(WorkTabPane pane) {
    workTabPanes.add(pane);
}
Run Code Online (Sandbox Code Playgroud)

(您仍然可以WorkTabPane向列表中添加子类.)

eclipse抱怨的原因如下:通过写<? extends WorkTabPane>你说"这是一个特定类的列表恰好扩展WorkTabPane".例如,该变量可以包含对a的引用ArrayList<WorkTabPaneSubclass1>.但是,如果是这种情况,则不应允许您将类型的项添加WorkTabPaneSubclass2到列表中.你看到了问题?