この質問を Morphia の問題としてタグ付けしましたが、より一般的なものだと思いますが、とにかく助けていただければ幸いです。
私はそれを制御できないIUserインターフェイスを持っています:
public interface IUser<T> {
...
public String getFirstName();
...
}
また、このインターフェースのUser (Morphia エンティティ) を実装しています。
@Entity
public class User implements IUser<ObjectId> {
@Id
private ObjectId id;
@Property
private String firstName;
public String getFirstName() {
return this.firstName;
}
...
}
Morphia がクラスのマッピングを要求した場合、これが Morphia エンティティであるため、User.class を提供します。したがって、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(...)メソッドの第 1 引数はClass<T>
型なので、IUser.class を指定します。でも、これだからList<IUser<ObjectId>>
結果は期待できませんが、ただList<IUser>
。このようにして、IUser のタイプを失いました。この Morphia のメソッドに、パラメータ化された IUser オブジェクトのリストを返すように強制することはできますか?
前もってありがとう、ズラトコ