• java(泛型)


    泛型的好处:

    1、编译时,检查添加元素的类型,提高了安全性

    2、减少了类型转换的次数,提高效率

    概念:

    1、泛型又称参数化类型,解决数据类型的安全性问题

    2、在类声明或实例化时只要指定好需要的具体类型即可

    3、java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。会使代码更简洁更健壮

    4、泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值类型,或者是参数类型

    注意事项:

    1、E只能是引用类型,不可以是基本数据类型

    1. ArrayList<Integer> integers = new ArrayList<>();//true
    2. ArrayList<int> ints = new ArrayList<int>();//错误

    2、在指定泛型具体类型后,可以传入该类型或者其子类类型

    1. public class Study {
    2. @SuppressWarnings({"all"})
    3. public static void main(String[] args) {
    4. ArrayList<A> as = new ArrayList<>();
    5. as.add(new B());
    6. }
    7. }
    8. class A{}
    9. class B extends A{}

    3、如果不指定泛型类型,则默认为Object

           ArrayList<Object> arrayList = new ArrayList<>();

    自定义泛型类:

    class 类名<T,R...>{       成员        }可以有多个泛型

    注意事项:

    1、普通成员可以使用泛型

    2、使用泛型的数组,不能初始化

    3、静态方法中不能使用类的泛型

    4、泛型类的类型,是在创建对象时确定的(需要指定确定的类型)

    5、如果在创建对象时,没有指定类型,默认为Object

    1. class Person<T,E,M>{//Person就称为自定义泛型类
    2. //普通成员可以使用泛型(属性、方法)
    3. T name;
    4. E age;
    5. M sal;
    6. T[] ts=new T[3];//使用泛型的数组,不能初始化(不确定T的类型,就无法在开辟空间)
    7. public Person(T name, E age, M sal) {
    8. this.name = name;
    9. this.age = age;
    10. this.sal = sal;
    11. }
    12. public static say(T name){//静态方法不允许使用泛型
    13. System.out.println(name);
    14. }
    15. }

    自定义泛型接口:

    interface  接口名<T,R...>{        }

    注意事项:

    1、接口中,静态成员也不能使用泛型

    2、泛型接口的类型,在继承接口或者实现接口时确定

    3、没有指定类型,默认为Object

    1. interface Usb<U,R>{
    2. R get(U u);
    3. void say(U u,R r);
    4. }
    5. class A implements Usb<String,Double>{
    6. @Override
    7. public Double get(String s) {
    8. return 1.0;
    9. }
    10. @Override
    11. public void say(String s, Double aDouble) {
    12. System.out.println(s+aDouble);
    13. }
    14. }

    自定义泛型方法:

    修饰符  <T,R...> 返回类型 方法名(参数列表){}

    注意事项:

    1、泛型方法,可以定义在普通类中,也可以定义在泛型类中

    2、当泛型方法被调用时,类型会确定

    3、public void say(E e){}修饰符后没有<T,R..>,此时不是泛型方法,而是使用了泛型

    1. class A{
    2. public <T,R> void say(T t,R r){}//泛型方法
    3. }

  • 相关阅读:
    Java Kids-百倍提速【Mac IOS】
    机器学习课程复习——隐马尔可夫
    Python从入门到实践(六)用户输入和while循环
    ECCV 2022|经典算法老当益壮,谷歌提出基于k-means聚类的视觉Transformer
    黑马点评--Redis消息队列
    Kubernetes中Pod的扩缩容介绍
    dbImageSDK 高速数字图像处理
    MySQL-存储过程和函数
    MSVCR80.DLL 丢失修复方法:完美解决你的问题!
    python画板
  • 原文地址:https://blog.csdn.net/weixin_63954483/article/details/125486353