2

我想在 Java 类中有一个方法,它允许我只传递从超类 fe 继承的对象:

我有容器超类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();
        }
    }
}

不幸的是它没有编译。

4

3 回答 3

1

干得好

class NRowsXNColumns extends GenericLayout {
    public <T extends Div> NRowsXNColumns(List<T> containers) {
        for(T container: containers) {
            // Do whatever with container
        }
    }
}
于 2015-07-08T16:18:59.017 回答
1

您可以限制泛型中的类型,例如声明 a List<? extends Div>,但在声明循环变量时不能使用该符号container

for (Div container : containers) {
    container.display();
}

由于containersmust 中的所有对象Div或 的子类Div,它们都可以分配给简单声明为 的变量Div

(在泛型方法中,您可以定义<T extends Div>然后将列表声明为List<T extends Div>,但在这种情况下没有这样的定义T存在。)

于 2015-07-08T16:21:03.960 回答
1

你为什么不使用只是 -

public NRowsXNColumns(List<Div> containers) {

现在您可以传递属于 Div 类或 Div 任何子类的对象列表

于 2015-07-08T16:32:51.120 回答