java - Java 泛型有没有办法采用需要实现 2 个接口(interface)的泛型参数?

标签 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;
    }
}

有没有一种方法可以使 ParentImpl 类中的 setChildren() 工作,而无需从接口(interface)和实现中完全删除通用类型?

我想做类似的事情-

public void setChildren(List<? extends ChildInterface1 & ChildInterface2> children) 

这种接口(interface)/实现结构对非泛型类型有效,但似乎泛型运行时删除的某些方面可能使这不可能?还是我错过了一些神奇的语法?

编辑:使用列表 产生这个编译错误 -

...\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/

相关文章:

Java Generics调用self类解释

Java - 在接口(interface)中使用两个同名的类

golang - 取消引用后从结构中获取接口(interface)实现实例

java - 没有任何正当理由无法连接到相机服务(RuntimeException)

java - 无法从 List<List> 转换为 List<List<?>>

java - 当没有使用 java 的分隔符时,使用正则表达式拆分字符串

ios - Swift 泛型函数

java - 接口(interface)定义的关系的术语

java - 静态全局变量无法解析

java - 调整 Windows 和 Swing 的大小