Java方法,仅接受从超类继承的对象

时间:2015-07-08 16:06:25

标签: java generics inheritance typed

我想在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();
        }
    }
}

不幸的是它没有编译。

3 个答案:

答案 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中的所有对象必须是DivDiv的子类,因此可以将它们全部分配给一个简称为Div的变量。

(在通用方法中,您可以定义<T extends Div>,然后将列表声明为List<T extends Div>,但在这种情况下不存在T的此类定义。)

答案 2 :(得分:1)

为什么不使用 -

public NRowsXNColumns(List<Div> containers) {

现在,您可以传递Div类或Div

的任何子类的对象列表