Java - 用于每个循环键入

时间:2015-06-17 16:38:54

标签: java list inheritance foreach

我的问题:如何让以下代码生效?

代码: for (CustomTab tab : tabPane.getTabs()) { ... }

或者在可能创建的类customTabPane中编写哪种方法以使其在兼容的对象类型中获取。我在泛型中读到了一些关于extends的内容 - 例如:ObservableList<? extends something>

1 个答案:

答案 0 :(得分:0)

基本上你在谈论我认为的两件不同的事情。首先是每个循环。您可以将它用于实现Iterable的任何类型,例如:

class CustomTab {};

class TabPane<T> implements Iterable<T> {

    @Override
    public Iterator<T> iterator() {
        ...
    }
}

public void main() {
    TabPane pane = new TabPane<CustomTab>();
    for (CustomTab i : pane) {
       ... 
    }
}

第二个主题是泛型。您可以限制仅为继承树定义TabPane。例如,如果您希望为CustomTab和派生类型构造TabPane,您可以像这样编写它:

class TabPane<T extends CustomTab> implements Iterable<T> {

    @Override
    public Iterator<T> iterator() {
        ...
    }
}

所以这是有效的:

class DerivedPane extends CustomTab{};
new TabPane<DerivedPane>();

但这不会:

class OtherPane{};
new TabPane<OtherPane>();