Java Generics是否有办法采用需要实现2个接口的Generic参数?

Ric*_*ols 4 java generics interface

说我有这个代码 -

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让ParentImpl类中的setChildren()工作,而不从接口和实现中完全删除Generic类型?

我想做点什么 -

public void setChildren(List<? extends ChildInterface1 & ChildInterface2> children) 
Run Code Online (Sandbox Code Playgroud)

这种接口/实现结构对非泛型类型有效,但似乎泛型的运行时擦除的某些方面可能会使这变得不可能?或者我错过了一些神奇的语法?

编辑:使用列表<?扩展ChildInterface1&ChildInterface2>产生此编译错误 -

...\ParentImpl.java:20: > expected
    public void setChildren(List<? extends ChildInterface1 & ChildInterface2> children) {
Run Code Online (Sandbox Code Playgroud)

Jor*_*orn 11

您可以指定一个方法来获取实现这两个接口的对象,如下所示:

public <T extends IFirst & ISecond> void doSomething(T obj) {}
Run Code Online (Sandbox Code Playgroud)

但是,在您的示例中,这并不重要,因为您的子接口都指定了相同的方法.