带通配符的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是正确的。考虑一下在此处使用通配符的附加值。您如何知道合适的类型?doinstanceof AsdPlayerDao
,instanceof AsdPartnerDao
。。。