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

只接受从超类继承的对象的Java方法,java,generics,inheritance,typed,Java,Generics,Inheritance,Typed,我希望Java类中有一个方法,该方法允许我只传递从超类继承的对象,例如: 我有容器超级类Div: package org.gwtbootstrap3.client.ui.html; public class Div extends ComplexWidget { public Div() { setElement(Document.get().createDivElement()); } } 我想在NRowsXNColum

我希望Java类中有一个方法,该方法允许我只传递从超类继承的对象,例如:

我有容器超级类
Div

package org.gwtbootstrap3.client.ui.html;
    public class Div extends ComplexWidget {
        public Div() {
            setElement(Document.get().createDivElement());
        }
    }
我想在
NRowsXNColumns
类中使用
Div
类及其子类:

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();
        }
    }
}
公共类NRowsXNColumns扩展了GenericLayout{
公共NRowsXNColumns(列表容器){
//对扩展Div类的每个容器执行一些操作
for(T扩展Div容器:容器){
container.display();
}
}
}
不幸的是,它无法编译。

给你

class NRowsXNColumns extends GenericLayout {
    public <T extends Div> NRowsXNColumns(List<T> containers) {
        for(T container: containers) {
            // Do whatever with container
        }
    }
}
类NRowsXNColumns扩展了GenericLayout{
公共NRowsXNColumns(列表容器){
对于(T容器:容器){
//用容器做什么都行
}
}
}

您可以限制泛型中的类型,例如声明
列表为什么不使用-

public NRowsXNColumns(List<Div> containers) {
公共NRowsXNColumns(列表容器){

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

编译错误是什么?显然,
T extensed Div
不是有效的Java。不起作用。我的类
NRowsXNColumns
不接受任何类型化参数T。此外,您没有将参数限制为扩展超类
Div
。在你的例子中,它可以接受一切,正如我所理解的。我也不明白你为什么要添加返回类型?嗯,你尝试了吗?如果不建议尝试的话。泛型不需要在类级别定义。它们也可以在构造函数或方法级别声明。你看到的不是返回类型。而是一种指定gen的方法eric类型信息。在代码片段中,我们指定T的列表必须是一个对象列表-that-extends-Div。@masterdany88
在这段代码中,约束
T
,就像你想要的那样。只是它实际上买不到多少,一个通配符就足够了。好的。循环澄清很好。但是你给我的声明没有编译,我收到一个错误:
标记“extends”上的语法错误,应为
类型参数Div正在隐藏类型Div
啊,对不起,我从您的代码中复制了
T extends Div
,但没有意识到那里没有定义
T
。在这种情况下,您可以使用
通配符。除非您要传递的列表声明为
列表
,否则这将不起作用。希望吗s传递一个div对象或div子类的列表。那么如果不是
list
,他将如何声明该列表。你说的是正确的。但是这怎么会使这个答案不正确呢?如果有一个名为
FloatedDiv
的子类,那么OP的代码中完全可能有一个
list
,并且该列表可能是正确的无法传递到此方法。这没有意义,因为他想传递Div的任何子类的列表和/或Div本身。在这种情况下,他为什么要创建列表。如果他已经在代码中其他地方创建了
列表
。创建此列表不一定是为了传递到此方法。
public NRowsXNColumns(List<Div> containers) {