あなたが知らないジェネリック

1.ジェネリックが必要な理由

//没有泛型之前存在的问题
List list = new ArrayList();
//需求:存入学生成绩
list.add(34);
list.add(23);
//问题一:类型不安全,可以存入其他类型的数据
list.add("Tom");

for(Object score : list){
    
    
    //问题二:类型转换异常
    int num = (int)score;
}

次に、コレクションでジェネリックを使用します

  1. コレクションインターフェイスまたはコレクションクラスは、JDK5以降の汎用構造に変更されます
  2. コレクションクラスをインスタンス化するときに、特定のジェネリック型を指定できます
  3. ジェネリック型は、基本的なデータ型ではなく、クラスである必要があります
  4. インスタンス化で特定の汎用タイプが指定されていない場合、デフォルトはオブジェクトです
    @Test
    public void test2(){
    
    
        ArrayList<Integer> list = new ArrayList<>();
        list.add(34);
        list.add(34);
        list.add(34);
        //解决问题一:避免编译时添加不同类型的数据
        //list.add("Tom");
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
    
    
            //避免问题二:类型转换异常
            int scaore = iterator.next();
            System.out.println(scaore);
        }
    }

3つのカスタム汎用構造

1.カスタムジェネリッククラス

public Person<T>{
    
    
    T name;
    
    public Person(T name){
    
    
        this.name = name;
    }
    
    public void setName(T name){
    
    
        this.name = name;
    }
    public T getName(){
    
    
        return name;
    }
}

//如果定义了泛型类,在实例化对象时没有使用,则默认是Object
Person p = new Person();

//建议在实例化对象时,指定泛型的类型
Person<String> p1 = new Person<>();

第四に、継承におけるジェネリックの実施形態

虽然类A是类B的父类,但是 G<A> 和 G<B> 不具备子父类关系,二者是并列关系
    
List<String> list1 = new ArrayList<>();
List<Object> list2 = new ArrayList<>();

//编译不通过
list1 = list2;

おすすめ

転載: blog.csdn.net/weixin_45321793/article/details/110139682