假设我有这段代码 -
public interface ParentInterface1 {
public List<? extends ChildInterface1> getChildren();
public void setChildren(List<? extends ChildInterface1> children);
}
public interface ParentInterface2 {
public List<? extends ChildInterface2> getChildren();
public void setChildren(List<? extends ChildInterface2> children);
}
public interface ChildInterface1 {
public String getField();
public void setField(String field);
}
public interface ChildInterface2 {
public String getField();
public void setField(String field);
}
public class LParentImpl implements ParentInterface1, ParentInterface2 {
private List<ChildImpl> list;
public List<ChildImpl> getChildren() {
return list;
}
public void setChildren(List<... wants to accept ChildImpl, which
implements ChildInterface1 & ChildInterface2> children) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
public class ChildImpl implements ChildInterface1, ChildInterface2 {
private String field;
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
}
有没有一种方法可以使 ParentImpl 类中的 setChildren() 工作,而无需从接口(interface)和实现中完全删除通用类型?
我想做类似的事情-
public void setChildren(List<? extends ChildInterface1 & ChildInterface2> children)
这种接口(interface)/实现结构对非泛型类型有效,但似乎泛型运行时删除的某些方面可能使这不可能?还是我错过了一些神奇的语法?
编辑:使用列表 extends ChildInterface1 & ChildInterface2> 产生这个编译错误 -
...\ParentImpl.java:20: > expected
public void setChildren(List<? extends ChildInterface1 & ChildInterface2> children) {
最佳答案
您可以指定一个方法,该方法采用实现这两个接口(interface)的对象,如下所示:
public <T extends IFirst & ISecond> void doSomething(T obj) {}
但是,这在您的示例中并不重要,因为您的两个子接口(interface)都指定了相同的方法。
关于java - Java 泛型有没有办法采用需要实现 2 个接口(interface)的泛型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1141068/