只接受从超类继承的对象的Java方法
我希望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
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) {