带通配符的Java接口?

带通配符的Java接口?,java,Java,我需要编写一个接口,该接口将用于至少两种不同的实现,如以下示例: public interface AsdDAO{ public Set<_What_?> getEntities(); } public class AsdPlayerDao implements AsdDAO{ public Set<Player> getEntities(); } public class AsdPartnerDao implements AsdDAO{ publ

我需要编写一个接口,该接口将用于至少两种不同的实现,如以下示例:

public interface AsdDAO{
    public Set<_What_?> getEntities();
}

public class AsdPlayerDao implements AsdDAO{
   public Set<Player> getEntities();
}

public class AsdPartnerDao implements AsdDAO{
   public Set<Partner> getEntities();
}
公共接口AsdDAO{
公共集合getEntities();
}
公共类AsdPlayerDao实现AsdDAO{
公共集合getEntities();
}
公共类AsdPartnerDao实现AsdDAO{
公共集合getEntities();
}
这些类将用于检索实体集合,如下所示:

@Autowired
AsdPartnerDao dao;

public void method(){
    Set<Partner> partners = dao.getEntities();
    //Some other stuff
}
@Autowired
AsdPartnerDao;
公开作废法(){
Set partners=dao.getEntities();
//一些其他的东西
}
是否可以在此处使用通配符,如
public Set getEntities()。事实上,我的问题是如何编写接口才是最好的方法?

看起来像你想要的

public interface AsdDAO<T>{
    public Set<T> getEntities();
}

public class AsdPlayerDao implements AsdDAO<Player>{
   public Set<Player> getEntities();
}

public class AsdPartnerDao implements AsdDAO<Player>{
   public Set<Partner> getEntities();
}
公共接口AsdDAO{
公共集合getEntities();
}
公共类AsdPlayerDao实现AsdDAO{
公共集合getEntities();
}
公共类AsdPartnerDao实现AsdDAO{
公共集合getEntities();
}
例如,也可以约束类型

public interface AsdDAO<T extends SomeInterfaceYouHave>{
公共接口AsdDAO{

如果实体未实现公共接口:

公共接口AsdDAO{
公共集合getEntities();
}

如有:

公共接口AsdDAO{

public Set是否尝试了
公共接口AsdDAO{public Set getEntities();}
?使用
会使它变得毫无用处。好吧,试着使用它。看看你能对这些未知类型集做多少工作。@Thilo-Well,我可以明确地将它转换为适当的类型。@St.Antario避免在返回类型中使用通配符。这会让方法的调用者感到困惑。(有效Java第二版)如果您希望数据结构不可修改,请使用集合将其包装起来。不可修改xxx(…)
。Thilo是正确的。考虑一下在此处使用通配符的附加值。您如何知道合适的类型?do
instanceof AsdPlayerDao
instanceof AsdPartnerDao
。。。