0

次のようなJPAモデルPOJOのジェネリッククラスがあります。

public interface Identifiable<PK extends Serializable> {
    PK getUniqueId();
}

public interface GenericDao<T extends Identifiable<PK>> {
    public T findById(PK id);
}

このコードはコンパイルされません。これが機能するには、指定する必要があります

public interface GenericDao<T extends Identifiable<PK>, PK extends Serializable> 

しかし、それは冗長な情報です!! T が Identifiable を拡張するという事実は、PK タイプが Identifiable インスタンスに指定され、これが DAO の PK に使用するタイプであることを意味します。

冗長な情報なしでこれを機能させるにはどうすればよいですか?

ありがとう、フレッド


編集:簡略化された例

4

1 に答える 1

2

やってみました:

public interface WatchableDao<T extends Watchable<?>>

(つまり、それWatchable<Something>はですが、私は気にしませんSomething)

試したことはありませんが、試す価値はあります。

編集: 質問の編集を投稿すると、インターフェイスへの型パラメーターとして PK が本当に必要なようです。その場合、あなたがやっているように、制約を効果的に繰り返さなければならないと思います。はい、冗長ですが、他の場所での型引数としての使用に基づいて、どの効果的な制約が PK に適用されるかを言語が指定するよりも簡単だと思います。慰めになるとすれば、C# でも同じことが言えます。

また、何が実行可能かを確認するために別のインターフェイスを調べる必要がなく、インターフェイス自体から PK の制約が明確になります。

于 2008-10-31T07:20:30.043 に答える