私はこのエンティティ関係モデルを持っています:
// Entity interface
public interface Entity<Reference extends Entity<Reference>> extends Iterable<Attribute<Reference, ?>> {
// set a referrer and the RelationMetadata to this Entity
<Referrer extends Entity<Referrer>> void setReferrer(RelationMetadata<Referrer, Reference> relationMetadata, Referrer referrer);
some other methods...
}
// Relation Metadata is a relation descriptor
public class RelationMetadata<Referrer extends Entity<Referrer>, Reference extends Entity<Reference>> {
some methods...
}
エンティティ ('selectedEntity') を作成してメタデータを読み取り、リファラーをロードして、これらを 'selectedEntity' に接続したいと考えています。だから私の使い方は次のとおりです:
// obtain the entity metadata
EntityMetadata<E> entityMetadata = EntityManager.getEntityMetadata(selectedEntity.getClass());
// cycle on each relation my entity is reference
for (Iterator<RelationMetadata<? extends Entity<?>, E>> iterator = entityMetadata.getAsReferencesRelationsMetadataIterator(); iterator.hasNext();) {
// for each relation
RelationMetadata<? extends Entity<?>, E> relationMetadata = (RelationMetadata<? extends Entity<?>, E>) iterator.next();
// instance dao
Dao<?> referrerDao = DaoManager.getDao(relationMetadata.getReferrer());
some code..
// select referrer entity
Entity<?> referrer = referrerDao.selectByKey(...);
// set referrer to my 'selectedEntity'
selectedEntity.setReferrer(relationMetadata, referrer);
}
問題は、メソッド 'setReferrer' を呼び出すときにこのコンパイル エラーが発生することです。
'The method setReferrer(RelationMetadata<Referrer,E>, Referrer) in the type Entity<E> is not applicable for the arguments (RelationMetadata<capture#16-of ? extends Entity<?>,E>, Entity<capture#18-of ?>)'
読み込んだ「リファラー」が「relationMetadata」に正しく接続されていることはわかっていますが、それをコンパイラーに知らせるにはどうすればよいですか?
これは非常に厄介な問題です。解決方法がわかりません。
Gさん、ありがとうございます。