Java中的常用类保姆级教程(下)

简介: 泛型

六、泛型


6.1、泛型的概述


泛型其实就是一种数据类型,主要用于某个类或者接口中的数据类型不确定的时候,可以用一个标识符或者占位符来标书未知的数据类型,然后再使用该类或者该接口的时候可以指定该位置类型的真实类型


泛型可以用到接口、类、方法中,将数据类型作为参数传递,其实更像是一种数据类型的模板。


如果不使用泛型的话,从容器中获取出来的元素,由于我们不知道类型,所以需要强制类型转换


6.2、自定义和使用泛型


定义泛型


我们可以使用一个标识符,比如T(Type)在类中表示一种未知的数据类型


//在类上声明使用符号T,表示未知的类型
public class Point<T> {
  private T x;
  private T y;
  //省略getter/setter
}


使用泛型


一般在创建对象时,给未知的类型设置一个具体的类型,当没有指定泛型时,默认类型为Object类型。


//没有使用泛型,默认类型是Object
Point p1 = new Point();
Object x1 = p1.getX();
//使用String作为泛型类型
Point<String> p2 = new Point<String>();
String x2 = p2.getX();
//使用Integer作为泛型类型
Point<Integer> p3 = new Point<Integer>();
Integer x3 = p3.getX();


6.3、在集合中使用泛型


class ArrayList<E>{
  public boolean add(E e){ }
  public E get(int index){ }
}


此时的E也仅仅是一个占位符,我们知道这里仅仅只是一个元素,但是不知道是什么类型,E表示元素(Element)的类型,那么当使用容器时给出泛型就表示,该容器只能存储某种类型的数据。


//只能存储String类型的集合
List<String> list1 = new ArrayList<String>();
list1.add("A");
list1.add("B");
//只能存储Integer类型的集合
List<Integer> list2 = new ArrayList<Integer>();
list2.add(11);
list2.add(22)


由于集合的前后两个类型必须相同,所以在JDK1.8之后就可以省略后面实例化对象的时候的泛型的书写


List<String> list1 = new ArrayList<String>();
// 可以简写为
List<String> list1 = new ArrayList<>();


注意


1.泛型必须是引用类型,不能是基本数据类型


List<int> list = new ArrayList<int>();//编译错误


  1. 泛型不存在继承的关系


List<Object> list = new ArrayList<String>(); //编译错误


方法中,将数据类型作为参数传递,其实更像是一种数据类型的模板。


如果不使用泛型的话,从容器中获取出来的元素,由于我们不知道类型,所以需要强制类型转换


作者:XiaoLin_Java

链接:https://juejin.cn/post/6983686380119392264

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章
|
8月前
|
Java 关系型数据库 数据库
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
1170 4
|
7月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
400 101
|
7月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
346 100
|
8月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
587 143
|
6月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
259 4
|
6月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
312 5
|
6月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
392 5
|
7月前
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
446 10
|
6月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
311 1
|
6月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
448 1
下一篇
开通oss服务