私の主な質問は、いつ使用するか、およびクラス、抽象、インターフェイスと組み合わせた場合の次の違いは何ですか?
<E>
<E extends Interface>
<? extends Interface>
以下に示すのは、いくつかのコード署名を含む詳細な質問です。
このコードは、Guava Forwarding Decorators を使用して特定のコレクションを定義します。
基本インターフェース:
public interface AnimalSetInterface<E extends AnimalI> extends Set<E>
これは機能します:
public interface AsiaI<E extends AnimalI> extends AnimalSetInterface<E>
以下はエラーになります。
public interface AsiaI<E> extends AnimalSetInterface<E>
境界の不一致: タイプ E は、タイプ AnimalSetInterface の境界付きパラメーターの有効な代替ではありません
私が理解しようとしているのは、必要なだけをベース インターフェイスで指定した場合<E extends AnimalI>
、なぜ で再度指定する必要があるのAsiaI
ですか?
ジェネリックを理解し、同時にコードを最小限に抑えようとしています。
また、両方のクラスにそのようなコードがある場合、それを結合/最小化 (定型コードの削除/生成) する良い方法はありますか?
アジア:
public Asia(final ImmutableSet<E> animalSet){
super(animalSet);
}
public static <E extends AnimalI> AsiaI<E> of(final ImmutableSet<E> animalSet){
return new Asia(animalSet);
}
アフリカ:
public Africa(final ImmutableSet<E> animalSet){
super(animalSet);
}
public static <E extends AnimalI> AfricaI<E> of(final ImmutableSet<E> animalSet){
return new Africa(animalSet);
}