Javaでジェネリックで混乱

ランダム男:

私たちは整数の配列リストを作り、我々はリストに付加価値を最初java.Atにおけるジェネリックを学んでいます。

import java.util.ArrayList;
import java.util.List;

public class GenericsRunner {
    public static void main(String[] args) {
        ArrayList<Integer> numbers=new ArrayList<>();
        numbers.add(1);
    }

    static <X extends List> void duplicate(X list) {
        list.addAll(list);
    }
}

方法重複のみ拡張しているこれらのオブジェクトで使用することができますListしかし、以降のListインタフェースがあります

public interface List<E> extends Collection<E> 

そしてArrayListimplemetingされますList

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable,    
                   java.io.Serializable

私は、この時点で捕まってしまいました。スーパークラスからプロパティを継承し、それらのクラスによって使用されている拡張します。しかし、どのようにArraylist拡張されましたかList実際にArrayList実装されますListこれはどのようにこの実装メカニズムのためのキーワードの作業を拡張していますか?私はそれが使用されていることを混乱していますextendsimplements同じですか?

Dmitriiアブラモフ:

理由は、<X extends T>単に手段Xから継承されますTあなたはクラス宣言に継承を記述するときのようなインターフェースのための特別な構文はありません。

ArrayList実装は、インターフェイスList、それがから継承されていることをどの手段をListしたがって、ジェネリック型に適しています<X extends List>

Javaでは任意のクラスは、拡張することができます唯一のクラスを。デフォルトでは、それはだObjectあなたが他の親クラスを指定しないとき。そして、クラスおよびインタフェースは、インタフェースの任意の量を実装することができます。

お役に立てれば。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=410154&siteId=1