Javaの書き方で雑誌に載っていたもので、2点ほど質問があります。 Javaに詳しい方、ご回答お願い致します。 (1)下記の3つのインターフェイスですが、extends Repositoryと書いた場合、Repositoryをinterface で定義したり、extends Entityと書いた場合に、Entityをinterfaceで定義できる場合はどのような時なのでしょうか?通常はここはclassかabstract classになると思うのですが。 (2)ジェネリクスの書き方で、Repository, ID> という部分がありますが、これはRepositoryではだめなのでしょうか?RepositoryのTはEntityのTを継承しているという意味でこのように書いているのでしょうか?また、この場合RepositoryのIDはEntityのIDとは何も関係ないと思っていいのでしょうか? package schemagenerator.domain.repository; import schemagenerator.domain.model.DataSource; /** * {@link DataSource}のためのリポジトリ。 * { } package schemagenerator.domain.repository; import java.util.Collection; import java.util.UUID; import schemagenerator.domain.model.Entity; /** * リポジトリを表すインターフェイス。 * * {@link Entity エンティティ}の型 * @param {@link Entity エンティティ}のIDの型 * */ public interface Repository, ID> { /** * すべての{@link Entity エンティティ}を返す。 * * @return すべての{@link Entity エンティティ} */ Collection findAll(); /** * {@link Entity エンティティ}を識別子で検索する。 * * @param id {@link UUID} * @return {@link Entity エンティティ} */ T findById(ID id); /** * {@link Entity エンティティ}を保存する。 * * @param entity {@link Entity エンティティ} */ void store(T entity); } package schemagenerator.domain.model; /** * エンティティを表すインターフェイス。 * * @param エンティティの型 * @param 識別子 * * @version $Id$ */ public interface Entity, ID> { /** * 識別子を取得する。 * * @return 識別子 */ ID getIdentity(); /** * 指定されたエンティティとこのエンティティが同じ識別子かどうかを判定する。 * *
* プロパティファイル上のデータソースを読み書きできるリポジトリ。 *
* */ public interface DataSourceRespository extends Repository* {@link Entity}に対するリポジトリの責務を表すインターフェイス。 *
* * @param{@link #equals(Object)}と違って、ジェネリックスで安全に等価を判定する場合に利用する
* * @param other エンティティ * @return 同じ識別子ならtrue */ boolean sameIdentityAs(T other); }