我会同泽西岛开发一个我拥有许多资源的 app。 虽然这些资源的主要功能各不相同,但它们分享了许多共同方法(如清单、阅读、更新等)。 这些仪器在谷歌应用引擎上运行,并利用Guice进行依赖注射。
My first approach was to have a generic AbstactResource which contains all common logic, and it s respectively extended by all other resources which add their required custom methods.
public class AbstractResource<T> {
@GET
public ListPage<T> list(@QueryParam("limit") Integer limit,
@QueryParam("start") Integer start) {
// ... implementation
}
@GET
@Path("/{id}")
public T get(@PathParam("id") Long id) {
// ... implementation
}
And sample resource looks like:
public class TenantResource extends AbstractResource<Tenant> {
// custom resource related methods here
}
在该案中,所有工作都属于罚款。 在我增加一个层次的抽象性时,问题就会出现。 我要说的是,我只想为我的一些资源储存历史和变幻灯。 I ve还创建了一个更抽象的班级,将《摘要检索》称为“法院可核查资源”,增加了必要的功能。
public abstract class AuditableResource<T extends AuditableModel>
extends AbstractResource {
// here I override update and create methods to save changelogs
}
如你认为,本案中的类型参数已经改变(现在可适用Model)。
新的具体资源将考虑:
public class PropertyResource extends AuditableResource<Tenant> {
// custom resource related methods here
}
在此情况下,一切都仍然奏效,但此时此刻,我收到许多关于启动的警告信息:
WARNING: Return type T of method public T com.pkg.AbstractResource.get(java.lang.Long) is not resolvable to a concrete type
WARNING: Return type T of method public T com.pkg.AbstractResource.getNew() is not resolvable to a concrete type
WARNING: Return type com.pkg.data.ListPage<T> of method public com.pkg.ListPage<T> com.pkg.AbstractResource.list(java.lang.Integer,java.lang.Integer) is not resolvable to a concrete type
我真的想知道,这一办法是否正确使用泽西岛,我是否能够仅仅忽视这一信息。 她很想知道,如果资源很多,如何安排资源。