自学内容网 自学内容网

JavaSE之泛型专题

1. 认识泛型

  • 定义类、接口、方法时,同时声明了一个或者多个类型变量(如:),称为泛型类、泛型接口、泛型方法,它们统称为泛型。

  • 作用:泛型提供了在编译阶段约束所能操作的是数据类型,并自动进行检查的能力。这样可以避免强制类型转换,及其他可能出现的异常。

  • 注意:类型变量建议用大写的字母,常用的有:E(元素类型)、T(返回值类型)、K(键类型)、V(值类型)等

2. 泛型类

  • 语法规范

    修饰符 class 类名<类型变量, 类型变量, ...>{
        ...
    }
    
    //示例
    public class ArrayList<E>{
        ...
    }
    
  • 自定义泛型类

    //自定义MyArrayList,为了简化操作套用一下ArrayList
    public class MyArrayList<E> {
        private ArrayList list = new ArrayList();
        
        public boolean add(E e){
            list.add(e);
            return true;
        }
        
        pulbic boolean remove(E e){
            return list.remove(e);
        }
    }
    
    //模拟MyArrayList集合自定义一个集合MyArrayList
    MyArrayList<String> list = new MyArrayList<String>();
    //从Jdk1.7开始支持以下简化操作
    MyArrayList<String> list = new MyArrayList<>();
    list.add("hello");
    list.remove("hello");
    

3. 泛型接口

  • 语法规范

    修饰符 interface 接口名<类型变量, 类型变量, ...>{
        ...
    }
    
    //示例
    public interface A<E>{
        ...
    }
    
  • 自定义泛型接口

    public interface Data<T>{
        void add(T t);
        void update(T t);
        T query(int id);
    }
    
    //应用实例,比如StudentsData和TeachaersData都要完成Data的工作
    public class StudentsData implements Data<Student>{
        ...
    }
    public class TeachersData implements Data<Teacher>{
        ...
    }
    

4. 型方法

  • 语法规范

    修饰符<类型变量, 类型变量, ...> 返回值类型 方法名(形参列表){
    ...
    }
    
    //示例
    public static <T> void test(T t){
        ...
    }
    
  • 通配符

    • 为了增强泛型的灵活性,加入通配符
    • **概念:**就是"?",可以在”使用泛型“的时候代表一切类型;E T K V 是在定义泛型的时候使用
  • 上下限

    • 泛型上限: ? extends Car: ? 能接收的必须是Car或者其子类

    • 泛型下限:? super Car:? 能接受的必须是Car或者其父类

    • 应用示例

      public static void test(E e){
          ...
      }
      //这里如果采用E e的形式,就无法接收到形参Arraylist<>了;
      //所以要改成以下形式
      public static void test(ArrayList<?> cars){
          ...
      }
      
      //这里没有设置上下限就是可以接收任何的ArrayList<>了,指向性不明确;所以要改成以下的
      public static void test(ArrayList<? extends Car> cars){
          ...
      }
      

5. 泛型支持的类型

  • 泛型不支持基本数据类型,只能支持对象类型(引用数据类型)

    • 为什么呢?泛型工作在编译阶段,等编译后泛型就没用了,所以泛型在编译后都会被擦除,用Object替换,所以这边如果是基本类型的话会产生Object object = 基本类型 的问题。
  • 包装类

    • 包装类就是把基本类型的数据包装成对象的类型

      基本数据类型对应的包装类(引用数据类新)
      byteByte
      shortShort
      intInteger
      longLong
      charCharacter
      floatFloat
      doubleDouble
      booleanBoolean
    • 基本类型的数据包装成对象的方案

      • public Integer(int value)
        • 使用示例:Integer i = new Integer(100);
      • public static Integer valueOf(int i)
        • 使用示例:Integer i = Integer.valueOf(100;
    • 自动装箱:基本数据类型可以自动转换为包装类

      • 示例:Integer i = 100;
    • 自动拆箱:包装类型可以自动转换为基本类型

      • 示例:int j = i;
    • 其他功能

      • 可以把基本类型的数据转换成字符串类型

        • public static String toString(int i)

        • public String toString()

        • 示例

          int i=1;
          String res1 = Integer.toString(i);
          
          Integer j=i;
          String res2 = j.toString();
          
      • 可以把字符串类型的数值转换成数值本身对应的真实数据类型

        • public static int parseInt(String s)

        • public static Integer valueOf(String s)

        • 示例

          String str = "99";
          int i = Integer.valueOf(str);
          int j = Integer.parseInt(str);
          
        • 特别说明:parseInt可以完成转十进制操作

          String Number = "110"
          int num = Integer.parseInt(number, 2);
          System.out.println(num);//输出6
          

原文地址:https://blog.csdn.net/weixin_45887097/article/details/142679209

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!