IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Java基础-泛型的应用(类、接口、参数、返回值、继承、通配符) -> 正文阅读

[开发测试]Java基础-泛型的应用(类、接口、参数、返回值、继承、通配符)

1.位置与作用

  • 1.类
  • 2.接口
  • 3.参数类型
  • 4.方法返回值
  • 作用
    1.可以在编译期间检查错误
    2.降低运行时产生 ClassCastException 异常的概率(如:动态自定义泛型转换)
    3.实现声明类型限制,使代码更加 规范、易读、健壮
  • 注意:
    运行时就不会产生 ClassCastException异常,这句话并不准确
    请看 4.参数指明泛型中的异常

2.类 泛型

  • 类中的泛型,可以只有1个,可以存在多个(用逗号分隔)
  • 自定义的任意字母都可以,T只是一个代号(表示Type的意思)

在这里插入图片描述

3.参数与返回值 泛型

  • 根据参数类型传递的泛型,返回对应类型的返回值
  • 注意:如果方法内部无法处理类型转换,仍然会出现 ClassCastException异常

在这里插入图片描述

4.父子类 泛型

  • 对于父类中存在泛型,子类继承父类
  • 已知:父类class Father <T,M>{},则存在以下四种情况
//1.全部保留
class son1<T, M> extends Father<T, M> {
}

//2.1.部分保留、部分变更
class son2_1<T,Integer> extends Father<T,Integer> {
}

//2.2.部分保留、部分变更
class son2_2<T> extends Father<T,Integer> {
}

//3.全部变更
class son3<A, B> extends Father<A,B> {
}

//4.擦除
class son4<T, M> extends Father<T, M> {
}

5.接口与实现 泛型

  • 对于接口中存在泛型,实现类应满足如下情况
  • 已知:接口interface TestInterFace<T, M> {,则存在以下四种情况
package com.abl.javabasis._08_generics;

public interface TestInterFace<T, M> {
}

//全部保留
class Impl_1<T, M> implements TestInterFace<T, M> {
}

//部分保留、部分变更
class Impl_2_1<T, Integer> implements TestInterFace<T, Integer> {
}

//部分保留、部分变更
class Impl_2_2<T> implements TestInterFace<T, Integer> {
}

//全部变更
class Impl_3<A, B> implements TestInterFace<A, B> {
}

//擦除
class Impl_4<T, M> implements TestInterFace<T, M> {
}

6.通配符(?、extends、super)

如下方代码所示:

  • 通配符的限制
  • <? > : 没有任何类型限制,任意对象都可
  • <? extends Number> : 继承,限制为 Number或Number的子类(接口和实现类也是这个关系)
  • <? super Number> : 向上,限制为 Number或Number的父类

如下方代码所示:

  • 1.不能用在泛型方法声明上,返回值类型前面<>不能使用?
  • 2.不能用在泛型类的声明上
  • 3.不能用在创建对象上,右边属于创建集合对象
package com.abl.javabasis._08_generics;

import java.util.HashSet;

//1:不能用在泛型方法声明上,返回值类型前面<>不能使用?
//public static <错误> void test(ArrayList<?> list){}
//2:不能用在泛型类的声明上
//class Test<错误>{}
//3:不能用在创建对象上,右边属于创建集合对象
//ArrayList<?> list2 = new ArrayList<错误>();
public class TestWildcard {

    // ? extends 继承,限制为 Number或Number的子类
    void ltClass(HashSet<? extends Number> param) {

    }

    //? super 向上,限制为 Number或Number的父类
    void gtClass(HashSet<? super Number> param) {

    }

    //? 没有任何限制,任意对象都可
    void objClass(HashSet<?> p) {

    }

}

7.注意

  • 1.可以声明多个泛型,多个泛型用逗号分隔 class Test1 <Object,T,A> { }
  • 2.泛型对构造器没有影响,只是类声明处加尖括号
  • 3.泛型不相同的两个对象(引用),不能相互赋值
  • 4.自定义泛型,默认继承 object 但是不等于 Object
  • 5.不可以使用基本数据类型,但是可以使用包装类型
  • 6.简化操作=号右边,new后面的泛型声明可以忽略 ArrayList<String> strList = new ArrayList<>();
  • 7.类上的泛型,不能使用在静态变量和静态方法中
    (错误示范 )
    在这里插入图片描述

《上一篇:Object对象》

《下一篇:Java异常处理》

《目录:Java基础》

《幕》

  • 留白 —<老吉>
  • ~ 今 ~ ? ~ ?????????? ?????????? ???????

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:31:18  更:2022-03-11 22:31:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:45:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码