Java泛型的定义与运用
创始人
2025-01-15 15:33:42
0

泛型

泛型的作用从使用层面上来说是统一数据类型,防止将来的数据转换异常。从定义层面上来说,定义带泛型的类,方法等,将来使用的时候给泛型确定什么类型,泛型就会变成什么类型,凡是涉及到泛型的都会变成确定的类型,代码更灵活。
不使用泛型,少了限制,则在集合添加数据就不会类型异常的错误,导致运行结果出错。

public class Test {     public static void main(String[] args) {         ArrayList list = new ArrayList();         list.add("1");         list.add(666);         list.add(true);         for (Object o : list) {             String s = (String) o;             System.out.println(s.length());         }     } } 

在这里插入图片描述

  1. 泛型中的类型必须是引用类型
  2. 如果泛型不写,默认类型为Object

泛型的定义

含有泛型的类

new对象的时候确定类型,格式:

public class 类名{ } 
public class MyArrayList {     Object[] obj = new Object[5];//定义一个数组,充当ArrayList底层的数组,长度直接规定为10     int size;     public boolean add(E e){ //定义一个add方法,参数类型需要和泛型类型保持一致         obj[size] = e;         size++;         return true;     }     @Override     public String toString() {         return Arrays.toString(obj);     } } 
public class Test {     public static void main(String[] args) {         Student list1 = new Student<>();         list1.add("张三");         list1.add("李四");         System.out.println(list1);//直接输出对象名,默认调用toString         Student list2 = new Student<>();         list2.add(1);         list2.add(2);         System.out.println(list2);     } } 

在这里插入图片描述

含有泛型的方法

调用的时候确定类型,其格式:

修饰符  返回值类型 方法名(E e) 
public class Student {     public static  void addAll(ArrayList list, E...e){ //定义一个静态方法addAll,添加多个集合的元素,传入可变参数         for (E element : e) {             list.add(element);         }     } } 
public class Test {     public static void main(String[] args) {         ArrayList list1 = new ArrayList<>();         Student.addAll(list1, "张三", "李四");         System.out.println(list1);         ArrayList list2 = new ArrayList<>();         Student.addAll(list2, 1, 2);         System.out.println(list2);     } } 

在这里插入图片描述

含有泛型的接口

格式:

public interface 接口名{  } 

什么时候确定类型分两种,一种是在实现类的时候还没有确定类型,只能在new实现类的时候确定类型了,例如ArrayList。一种是在实现类的时候直接确定类型了比如Scanner。

public interface MyList {     public boolean add(E e); } 
public class MyArrayList implements MyList{     Object[] obj = new Object[5];     int size;     public boolean add(E e){ //定义一个add方法,参数类型需要和泛型类型保持一致         obj[size] = e;         size++;         return true;     }     @Override     public String toString() {         return Arrays.toString(obj);     } } 
public class Test {     public static void main(String[] args) {         MyArrayList list = new MyArrayList<>();         list.add("张三");         list.add("李四");         System.out.println(list);     } } 

在这里插入图片描述

泛型通配符

泛型通配符使得我们能够更加灵活地处理泛型类型,使代码更通用且可复用。包括以下几类
E:Element (在集合中使用,因为集合中存放的是元素)
T:Type(Java 类)
K:Key(键)
V:Value(值)
N:Number(数值类型)
?:表示不确定的 java 类型

public class Test {     public static void main(String[] args) {         ArrayList list1 = new ArrayList<>();         list1.add("张三");         list1.add("李四");         ArrayList list2 = new ArrayList<>();         list2.add(1);         list2.add(2);         test(list1);         test(list2);     }     public static void test(ArrayList list){ //?表示不确定的 java 类型         for (Object o : list) {             System.out.println(o);         }     } } 

泛型的上限下限

泛型的上下限可以规定泛型的范围
上限:?只能接收extends后面的本类类型以及子类类型
格式:
下限:?只能接收super后面的本类类型以及父类类型
格式:
Integer的父类Number
Number的父类Object
在这里插入图片描述

相关内容

热门资讯

第七分钟了解!微信呢小程序辅助... 第七分钟了解!微信呢小程序辅助器,卡五星游戏源码,教程书教程(详细教程)-哔哩哔哩1、全新机制【微信...
更值得关注的是!长春科乐作z弊... 更值得关注的是!长春科乐作z弊(辅助)真是是有辅助软件(有挂规律)-哔哩哔哩小薇(辅助器软件下载)致...
透视能赢!四川皮皮辅助挂,三江... 透视能赢!四川皮皮辅助挂,三江互娱辅助-总是是有辅助脚本(哔哩哔哩)1、四川皮皮辅助挂透视辅助软件激...
不少玩家反映!雀神广东定制插件... 不少玩家反映!雀神广东定制插件,wejoker开挂,透视课程(有挂攻略)-哔哩哔哩雀神广东定制插件是...
9分钟了解!潮汕汇透视辅助,游... 您好,游戏茶苑辅助软件这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多玩...
于此同时!福建天天开心十三张辅... 于此同时!福建天天开心十三张辅助软件(辅助)都是是真的辅助下载(有挂教学)-哔哩哔哩1、进入到福建天...
今天下午!心悦辅助工具,衢州都... 今天下午!心悦辅助工具,衢州都莱有没有辅助器-确实是真的有辅助器(哔哩哔哩)运衢州都莱有没有辅助器辅...
一分钟了解!透视辅助工具,hh... 一分钟了解!透视辅助工具,hhpoker智能辅助插件,透视模块(揭秘有挂)-哔哩哔哩;1、实时透视辅...
现有关情况通报如下!大菠萝提高... 现有关情况通报如下!大菠萝提高好牌几率(辅助)好像存在有辅助软件(有挂解惑)-哔哩哔哩1、大菠萝提高...
相较于以往!心悦填大坑辅助,开... 相较于以往!心悦填大坑辅助,开心泉州辅助免费下载-真是真的是有辅助神器(哔哩哔哩)在进入开心泉州辅助...