0

私の主な質問は、いつ使用するか、およびクラス、抽象、インターフェイスと組み合わせた場合の次の違いは何ですか?

  1. <E>

  2. <E extends Interface>

  3. <? 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);
}
4

1 に答える 1

3
 public class Africa<E extends AnimalI> extends AnimalSetAbstract implements AfricaI

 public class Asia<E> extends AnimalSetAbstract implements AsiaI

違いは、最初のケースではジェネリック型が AnimalI を拡張する必要があることです。2 番目のケースでは、ジェネリック型は任意のクラスにすることができます。

于 2013-02-28T21:51:13.863 に答える