当前位置: 首页 > news >正文

JAVA基础-泛型

文章目录

    • 泛型
    • 1.泛型的好处
    • 2.泛型的细节
    • 3.泛型类
      • 使用场景
      • 格式
      • 代码示例
    • 4.泛型方法
      • 使用场景
      • 格式
      • 代码示例
    • 5.泛型接口
    • 6.泛型的继承
    • 7.泛型的通配符
      • 通配符
      • 使用场景

泛型

​ 泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制

1.泛型的好处

  • 统一数据类型。
  • 把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来

2.泛型的细节

  • 泛型中不能写基本数据类型‘
  • 指定泛型的具体类型后,传递数据时,可以传入该类类型或者其子类类型
  • 如果不写泛型,类型默认是Object

3.泛型类

使用场景

当一个类中,某个变量的数据类型不确定时,就可以定义带有泛型的类

格式

修饰符 class 类名<类型>{}

举例:

public class ArrayList < E > {
创建该类对象时,E就确定类型}

代码示例

构建泛型类

//当我在编写一个类的时候,如果不确定类型,那么这个类就可以定义为泛型类。
public class MyArrayList<E> {Object[] obj = new Object[10];int size;//    E : 表示是不确定的类型。该类型在类名后面已经定义过了。
//    e:形参的名字,变量名public boolean add(E e){obj[size] = e;size++;return true;}public E get(int index){return (E)obj[index];}@Overridepublic String toString() {return Arrays.toString(obj);}
}

使用泛型类

    public static void main(String[] args) {//String类型MyArrayList<String> list = new MyArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");System.out.println(list);//Integer类型MyArrayList<Integer> list2 = new MyArrayList<>();list2.add(123);list2.add(456);list2.add(789);int i = list2.get(0);System.out.println(i);System.out.println(list2);    
}

4.泛型方法

使用场景

方法中形参类型不确定时:
方案①:使用类名后面定义的泛型
方案②:在方法申明上定义自己的泛型

格式

修饰符 <类型>返回值类型 方法名(类型 变量名){}

举例:

public <T> void show (T t){}

代码示例

定义一个工具类:ListUtil
类中定义一个静态方法addAll,用来添加多个集合的元素。

package a04mygenerics;import java.util.ArrayList;public class ListUtil {private ListUtil(){}//类中定义一个静态方法addAll,用来添加多个集合的元素。/**   参数一:集合*   参数二~最后:要添加的元素** */public static<E> void addAll(ArrayList<E> list, E e1,E e2,E e3,E e4){list.add(e1);list.add(e2);list.add(e3);list.add(e4);}/*    public static<E> void addAll2(ArrayList<E> list, E...e){for (E element : e) {list.add(element);}}*/public void show(){System.out.println("尼古拉斯·纯情·天真·暖男·阿玮");}
}
    public static void main(String[] args) {ArrayList<String> list1 = new ArrayList<>();ListUtil.addAll(list1, "aaa", "bbb", "ccc", "ddd");System.out.println(list1);ArrayList<Integer> list2 = new ArrayList<>();ListUtil.addAll(list2,1,2,3,4);System.out.println(list2);}

5.泛型接口

在接口名后面定义泛型,实现类确定类型,实现类延续泛型

修饰符 interface 接囗名<类型>{}

public interface List< E >{}

如何使用它:

1.实现类给出具体的类型

2.实现类延续泛型,创建实现类对象时再确定类型

6.泛型的继承

泛型不具备继承性,但是数据具备继承性

package a04mygenerics;import java.util.ArrayList;public class GenericsDemo5 {public static void main(String[] args) {//创建集合的对象ArrayList<Ye> list1 = new ArrayList<>();ArrayList<Fu> list2 = new ArrayList<>();ArrayList<Zi> list3 = new ArrayList<>();//调用method方法method(list1);method(list2);//报错,泛型不具备继承性method(list3);//报错,泛型不具备继承性list1.add(new Ye());list1.add(new Fu());//可以添加成功,数据具备继承性list1.add(new Zi());//可以添加成功,数据具备继承性}/** 此时,泛型里面写的是什么类型,那么只能传递什么类型的数据。* */public static void method(ArrayList<Ye> list) {}
}

7.泛型的通配符

此时,泛型里面写的是什么类型,那么只能传递什么类型的数据。弊端:
利用泛型方法有一个小弊端,此时他可以接受任意的数据类型
Ye Fu zi Student
希望:本方法虽然不确定类型,但是以后我希望只能传递Ye Fu zi,此时我们就可以使用泛型的通配符

通配符

? 也表示不确定的类型,他可以进行类型的限定

? extends E:表示可以传递E或者E所有的子类类型

? super E:表示可以传递E或者E所有的父类类型

使用场景

定义类、方法、接口的时候,如果类型不确定,就可以定义泛型

如果类型不确定,但是能知道是哪个继承体系中的,可以使用泛型的通配符

通配符关键点:可以限定类型的范围。


http://www.mrgr.cn/news/58505.html

相关文章:

  • 数据结构的删除操作
  • 多层感知机从零开始实现
  • 海外著名门户媒体发稿之科技时报Tech Times - 大舍传媒
  • vue富文本使用editor
  • 【C#】第三章习题
  • Spring Cloud --- GateWay和Sentinel集成实现服务限流
  • FineReport 多数据源报表
  • 搞fastjson总是惦记TemplatesImpl谁懂
  • SpingBoot原理
  • 线性表->链表(数据结构)
  • 在Android开发中WebView的详细使用方法
  • 【日常记录-Java】可变长度参数
  • 写导出接口的一些理解
  • lazada 商品详情 API 的获取与应用
  • python调用PIL库处理图片
  • JS轮播图实现自动轮播、悬浮停止轮播、点击切换,下方指示器与图片联动效果
  • 【人工智能】——matplotlib教程
  • 广州企业管理咨询公司排名前十
  • 大尺寸反射式液晶显示模块行业分析:预计2030年全球市场规模将达到2,020.21百万美元
  • echarts给Y轴的不同轴线设置不同的颜色的样式
  • 【OpenAI】第二节(Token)关于ChatGPT的Token你了解多少?最全Token讲解过程!
  • SpringMVC8-HttpMessageConverter
  • 《企业自设2-软件测试》搭建locust环境+使用它搜索百度接口
  • 在Flutter中实现排行榜滑动阻尼效果
  • 大家都在用的HR招聘管理工具:国内Top5排名
  • 免费开源!语音识别平台让医疗对话更高效,沟通更准确