泛型Generic

1.1简介

1. 使用场景:在定义的集合类的时候 不确定其数据类型 在实例集合的对象的时候确定其数据类型
           泛型就是一个变量,变量用于来接收其数据类型
2. 使用泛型
    A.在实例化集合可以确定其数据类型
    B.语法: List<E> li = new Arraylist<E>();
      例子: List<Student> li = new ArrayList<Student>()
    C.注意点:
       a.前后的泛型必须是一致的
       b.在jdk1.7之后出现了菱形的泛型 后面的数据类型可以省略
         例如:List<Student> li = new ArrayList<>()
       c.泛型必须是引用数据类型 不能是基本数据类型
3. 泛型好处:
   a.避免多次进行强制类型转换
   b.将运行时的错误提前到编译期
4. 泛型使用符号
   泛型使用的符号都是大写字母  所有大写字母都是可以使用
   常用的符号: K V T E......

1.2 定义泛型类

1.语法:
   访问修饰符 class 类名 <泛型> {
       类中所有的成员都可以使用其泛型
   }
2.例子:
    public   class  MyList<T>{

    }

1.3 定义泛型方法

1.语法:
   访问修饰符 <T> 返回值类型 方法名称(T t) {
       方法体;
       return 返回值
   }
2.例子:
   public <T>  void  showInfo(T t){

   }
3.说明
   a.普通成员方法与静态方法都可以加上泛型
   b.普通成员方法可以是类的泛型
   c.静态方法不能使用类的泛型

1.4 案例

定义一个方法,可以交换任意类型的数组的某两个元素

package com.xxx;

import java.util.Arrays;

public class ChangeArray {
    public static <T> T[] method(T[] arrays, int index1, int index2) {
        T temp = arrays[index1];
        arrays[index1] = arrays[index2];
        arrays[index2] = temp;
        return arrays;
    }
}

class TestChangeArray {
    public static void main(String[] args) {
        //交换下标为1和4的元素
        String[] ss = ChangeArray.method(new String[]{"a", "b", "c", "d", "e", "f"}, 1, 4);
        System.out.println(Arrays.toString(ss));
    }
}

1.5 定义泛型接口

1.泛型接口
   a.实现类确定其泛型(数据类型)
     接口:public interface Iterator<E>{
                E next()
          }
     实现类:
        public final class Scanner implements Iterator<String>{
               public String next()
        }
   b.实现类也不确定其泛型(数据类型)
     接口: public interface List<E>{
               boolean add(E e)
     }
     实现类:
        public class ArrayList<E> implements List<E>{
            public boolean add(E e)
        }

1.6 泛型通配符

1.泛型的通配符使用?来进行表示 ? 表示任意的数据类型  方法的通配符一般作为方法的参数使用 在实例化集合的时候
  不能使用通配符
2.常用的通配符
    <? extends E> E本身或者是其子类
    <? super T>  T本身或者是其父类类型
posted @ 2022-10-14 22:08  Rix里克斯  阅读(35)  评论(0)    收藏  举报