【发布时间】:2012-05-29 00:31:23
【问题描述】:
我正在尝试创建一个 API,以便在其他程序员使用我的服务时不需要实现和类名。该服务对“项目”执行各种操作,但服务应如何处理对项目的请求的主要影响因素是基于用户类型。到目前为止,我有一个接口 (Item) 和一个实现服务 (ItemService),然后是几个由此扩展的用户类型类(例如CompanyItemService)。用户类型也有一个结构,超类为User,子类如Company:
public class ItemService<T extends User> extends Item {
User user;
public ItemService(User user) {
this.user = user;
}
@Override
public boolean belongsToUser() {
//Check all records
}
}
public class CompanyItemService<T extends Company> extends ItemService<Company> {
public CompanyItemService(Company user) {
super(user);
}
@Override
public boolean belongsToUser() {
//Check company specific records
}
}
public class User {
//Common user stuff
}
public class Company extends User {
//Company specific stuff
}
所以我希望能够通过如下调用使用我的服务:
User company = new Company();
//stuff
Item item = new ItemService<Company>(company)
item.belongsToUser();
但是,当我这样做时,ItemService 中的方法被调用,而不是CompanyItemService 中的覆盖方法。是否有可能在不需要知道它属于 CompanyItemService 类的情况下获得这个覆盖方法?
干杯,
阿列克谢蓝。
所有这一切的总体思路是,当发明另一种用户类型时,可以根据需要添加另一种特定于用户的服务,而无需修改现有代码。此外,如果有很多用户类型,我只希望使用 API 的人必须记住使用 ItemService,然后让泛型来完成剩下的工作。
【问题讨论】:
标签: java generics inheritance polymorphism