在接口方法中声明子类型捕获

时间:2016-04-27 21:16:15

标签: java generics

我基本上试图实现以下语法(目前,没有编译)。如果有人能解释如何实现这一点,我将不胜感激。让事情变得复杂的是我要添加'方法重复重载

public interface Organization {
    Organization add(Hub hub);
}

public class JpaOrganization implements Organization {


    @OneToMany(mappedBy = "organization", cascade = CascadeType.ALL)
    private Set<JpaHub> hubs = new LinkedHashSet<>();


    @Override
    public JpaOrganization add(JpaHub hub) {
        hub.setOrganization(this);
        hubs.add(hub);
        return this;
    }
}

  public interface Hub {
    void setOrganization(Organization organization);
  }


public class JpaHub implements Hub {
    @Override
    public void setOrganization(JpaOrganization organization) {
        this.organization = organization;
    }
}

我正在尝试这样做以抽象DAO层以进行预期的迁移。所以,所有&#34; JPA&#34;实现可以假设它们正在处理JPA实现,这对于所有反射都是必不可少的。

我需要捕获类型,但这种特殊安排的语法规避了我。

我尝试过类似的事情:

<O extends Organization, H extends Hub> O foo(H hub);

实现:

   @Override
    public JpaOrganization add(Hub hub) {
        return this;
    }

这个编译,但给了我一个检查警告,告诉我,我可能做错了什么。根据我正在阅读的内容,我不确定如果没有一些警告我就能做到这一点。

1 个答案:

答案 0 :(得分:1)

在班级定义类型变量:

public interface Organization<O extends Organization, H extends Hub> {
  O add(H hub);
}