我的问题:如何让以下代码生效?
代码: for (CustomTab tab : tabPane.getTabs()) { ... }
或者在可能创建的类customTabPane中编写哪种方法以使其在兼容的对象类型中获取。我在泛型中读到了一些关于extends
的内容 - 例如:ObservableList<? extends something>
。
答案 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>();