尽管我将此问题标记为 Morphia 问题,但我认为它更笼统,但无论如何,感谢您的帮助。
我有IUser界面,我无法控制它:
public interface IUser<T> {
...
public String getFirstName();
...
}
我也有这个接口的实现用户(Morphia 实体):
@Entity
public class User implements IUser<ObjectId> {
@Id
private ObjectId id;
@Property
private String firstName;
public String getFirstName() {
return this.firstName;
}
...
}
当 Morphia 要求映射类时,我提供 User.class,因为这是 Morphia 实体。因此,当我扩展 BasicDAO 时,我提供User和ObjectId作为类型:
public class UserDAO extends MongoDAO<User, ObjectId> {
public List<IUser<ObjectId>> getUsers(String id) {
return ds.find(IUser.class, Mapper.ID_KEY, new ObjectId(id)).asList();
}
}
现在,问题出现在getUsers方法中。如您所见,我想继续使用这个类之外的接口;这就是为什么我期望List<IUser<ObjectId>>
作为返回类型。
ds.find(...)方法的第一个参数是一个Class<T>
类型,所以我提供了 IUser.class。但是,正因为如此,我不能再期待List<IUser<ObjectId>>
结果了,只是List<IUser>
。这样,我就失去了 IUser 的类型。是否有可能强制此 Morphia 的方法返回参数化 IUser 对象的列表?
提前谢谢你,兹拉特科