私はオブジェクトを作成、読み込み、更新、削除するための基本クラスを実装しようとしています。私はそれを行うためのライブラリを見つけることができると確信していますが、私は教育目的のためにそれを自分でやっています。Java duplicate generic definition
だから私は救われ、すべてがエンティティであり、彼らは、特定のタイプの識別子を持っていること、それを作った:
interface Entity<T extends Serializable> extends Serializable
{
T getIdentifier();
}
事業体は、同様に直列化可能であり、その識別子。次に、自分のコンテンツから(エンティティをシリアライズして)エンティティを保存し、そのキーから名前を付けることになっているEntityPersistor
を持っています。このpersistorの私の唯一の実装は、ディスク上に保存することです。これは、識別子をファイルの名前として使用して保存します。
interface EntityPersistor<K extends Serializable, T extends Entity<K>> extends Iterable<T>
{
void save(T entity);
void delete(T entity);
void deleteById(K id);
T getById(K id);
boolean contains(K id);
List<T> loadAll();
}
だから、問題は、私はそれを使用したい場合、私は二回キーのタイプを再定義する必要がある。
は、ここに私のエンティティpersistorです。私は書いています:
interface EntityPersistor<T extends Entity<K extends Serializable>> extends Iterable<T>
しかし、コンパイラエラーが発生します。ですから、私はそれをそのように使用しなければなりません:
これは不都合です。
これを回避する方法がありますか?宣言の読みやすさが分かりにくくなるような気がしますが、使い方が重要です。
EDIT:
私はclass Product implements Entity<String>
'Product'が' Entity 'であるとしますか? –
Zircon
@Zirconはい、質問を編集しました – Winter