2021.5.20笔记 泛型


泛型图解

在这里插入图片描述


使用泛型的优缺点

1.使用泛型
好处:避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型;把运行期异常(代码运行后会抛出的异常),提升到了编译期(写代码时候会报错)
弊端:泛型是什么类型,只能存储什么类型的数据

public class FloodType {
    public static void main(String[] args) {
        ArrayList<String> arr1 = new ArrayList<>();
        arr1.add("小新");
        arr1.add("妮妮");
        Iterator<String> iter1 = arr1.iterator();
        while (iter1.hasNext()) {
            String s1 = iter1.next();
            System.out.println(s1.length());
        }
    }
}

2.不使用泛型
好处:不使用泛型,默认类型是Object类型,可以存储任意类型的数据
弊端:不安全,会引发异常

public class FloodType {
    public static void main(String[] args) {
        ArrayList arr1 = new ArrayList();
        arr1.add("小新");
        arr1.add(1);
        Iterator iter1 = arr1.iterator();
        while (iter1.hasNext()) {
            Object next1 = iter1.next();
            System.out.println(next1);

            String s1 = (String)next1;      //抛出异常
            System.out.println(s1.length());       
        }
    }
}

含有泛型的类

可以模拟ArrayList集合
当我们不确定数据类型的时候,可以用泛型
创建对象时候确定泛型的数据类型

public class FloodClass<E> {
    private E name;

    public E getName() {
        return name;
    }

    public void setName(E name) {
        this.name = name;
    }
}
public class FloodType2 {
    public static void main(String[] args) {
        FloodClass<Integer> flood1 = new FloodClass<>();
        flood1.setName(1);
        Integer name1 = flood1.getName();
        System.out.println(name1);
        FloodClass<String> flood2 = new FloodClass<>();
        flood2.setName("小新");
        String name2 = flood2.getName();
        System.out.println(name2);
    }
}

含有泛型的方法

定义含有泛型的方法,泛型定义在方法的修饰符和返回值类型之间

格式:修饰符<泛型> 返回值类型 方法名(参数列表(使用泛型)){
…方法体
}
含有泛型的方法,在调用方法的时候确定泛型的数据类型,传递什么类型的参数,泛型就是什么类型

public class GenericScr {
    public <E> void method01(E e) {
        System.out.println(e);
    }
    public static <M> void method02(M m) {
        System.out.println(m);
    }
}
public class GenericClass {
    public static void main(String[] args) {
        GenericScr src = new GenericScr();
        src.method01("小新");
        src.method01(1);
        GenericScr.method02("妮妮");
        GenericScr.method02(2);
    }
}

含有泛型的接口

在这里插入图片描述

public interface GenericInterface<I> {
    public abstract void method(I i);
}
public class InterfaceClass implements GenericInterface<String>{
    @Override
    public void method(String o) {
        System.out.println(o);
    }
}
public class InterfaceObj {
    public static void main(String[] args) {
        InterfaceClass inter = new InterfaceClass();
        inter.method("小新");
    }
}

在这里插入图片描述

public interface GenericInterface<I> {
    public abstract void method(I i);
}
public class InterfaceClass<I> implements GenericInterface<I>{
    @Override
    public void method(I i) {
        System.out.println(i);
    }
}
public class InterfaceObj {
    public static void main(String[] args) {
        InterfaceClass<String> inter1 = new InterfaceClass<>();
        inter1.method("小新");

        InterfaceClass<Integer> inter2 = new InterfaceClass<>();
        inter2.method(10);
    }
}

泛型通配符

在这里插入图片描述
在这里插入图片描述

public class NewObj {
    public static void main(String[] args) {
        ArrayList<String> arr1 = new ArrayList<>();
        arr1.add("小新");
        arr1.add("妮妮");
        ArrayList<Integer> arr2 = new ArrayList<>();
        arr2.add(1);
        arr2.add(2);
        method(arr1);
        method(arr2);
    }
    public static void method(ArrayList<?> list) {
        Iterator<?> iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next);
        }
    }
}

在这里插入图片描述
(可以看懂即可)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值