我想在Java类中有一个方法,它允许我只传递从超类继承的对象,例如:
我有容器超类Div
:
package org.gwtbootstrap3.client.ui.html;
public class Div extends ComplexWidget {
public Div() {
setElement(Document.get().createDivElement());
}
}
我想在Div
类中使用NRowsXNColumns
类及其子类:
public class NRowsXNColumns extends GenericLayout {
public NRowsXNColumns(List<T extends Div> containers) {
// Do something with each container that extends Div class
for(T extends Div container: containers) {
container.display();
}
}
}
不幸的是它没有编译。
答案 0 :(得分:1)
你去吧
class NRowsXNColumns extends GenericLayout {
public <T extends Div> NRowsXNColumns(List<T> containers) {
for(T container: containers) {
// Do whatever with container
}
}
}
答案 1 :(得分:1)
您可以限制泛型中的类型,例如声明List<? extends Div>
,但在声明循环变量container
时不能使用该表示法:
for (Div container : containers) {
container.display();
}
由于containers
中的所有对象必须是Div
或Div
的子类,因此可以将它们全部分配给一个简称为Div
的变量。
(在通用方法中,您可以定义<T extends Div>
,然后将列表声明为List<T extends Div>
,但在这种情况下不存在T
的此类定义。)
答案 2 :(得分:1)
为什么不使用 -
public NRowsXNColumns(List<Div> containers) {
现在,您可以传递Div类或Div
的任何子类的对象列表