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

第十三章总结

一.泛型

1.定义泛型类

泛型机制语法

类名<T>

其中,T是泛型的名称,代表某一种类型。

【例13.6】创建带泛型的图书类

代码:

结果:

2.泛型的常规用法

(1)定义泛型类时声明多个变量

class MyClass<T1,T2>{ }

其中,T1和T2为可能被定义的类型。

这样,在实例化指定类型的对象时就可以指定多个类型。例如:

MyClass<Boolean,Float> m=new MyClass<Boolean.float>();

(2)定义泛型时声明数组类型 
        【例13.7】定义泛型数组
代码:

结果:

可见,可以在使用泛型机制时声明一个数组,但是不可以使用泛型来创建数组的实例

(3)集合类声明容器的元素

JDK中的集合接口、集合类都被定义了泛型,其中List<E>的泛型E实际上就是element元素的首字母,Map<K,V>的泛型K和V就是key键和value值的首字母。

3.泛型的高级用法

(1)限制泛型可用类型

默认可以使用任何类型来实例化一个泛型类对象,但Java中也对泛型类实例的类型作了限制。语法:

class 类名称<T extends anyClass>

其中,anyClass指某个接口或类。 

使用泛型限制后,泛型类的类型必须实现或继承anyClass这个接口或类。无论anyClass是接口还是类,在进行泛型限制时都必须使用extends关键字。

(2)使用类型通配符

在泛型机制中,提供了类型通配符,其主要作用是在创建一个泛型类对象时限制这个泛型类的类型实现或继承某个接口或类的子类。要声明这样一个对象可以使用“?”通配符来表示,同时使用extends关键字来对泛型加以限制。语法:

泛型类名称<? extends List> a=null;

其中,<? extends List>表示类型未知,当需要使用该泛型对象时,可以单独实例化。例如:

A<? extends List> a=null;
a=new A<ArrayList>();
a=new A<LinkedList>();

如果实例化没有实现List接口的泛型对象,编译器会报错。

除了可以实例化一个限制泛型类型的实例,还可以将该实例放置在方法的参数中。例如:

public void doSomething(A<? extends List>a){}

在上述代码中,定义方法有效地限制了传入doSomething()方法的参数类型。

(3)继承泛型类与实现泛型接口

定义为泛型的类和接口也可以被继承与实现。例如,让SubClass类继承ExtendClass的泛型:

class ExtendClass<T1>{}
class SubClass<T1,T2,T3> extends ExtendClass<T1>{}

4.泛型总结

使用方法:

(1)泛型的类型参数只能是类类型,不可以是简单类型,如A<int>这种泛型定义就是错误的。

(2)泛型的类型个数可以是多个

(3)可以使用extends关键字限制泛型的类型。

(4)可以使用通配符限制泛型的类型。

二.枚举类型

        1.使用枚举类型设置常量

使用枚举类型定义常量的语法:

public enum Constants{Constants_A,Constants-B,
}

其中,enum是定义枚举类型的关键字。

当需要在程序中使用该常量时,可以使用Constants.Constants_A来表示。

【例13.1】分别创建四季的接口常量和枚举,比较两者的使用场景

代码:

2.深入了解枚举类型

【例13.5】为四季枚举创建构造方法,记录每一个季节的特征

代码:

结果:

3.使用枚举类型的优势

(1)类型安全。

(2)紧凑有效的数据定义。

(3)可以和程序其他部分完美交互。

(4)运行效率高。

http://www.lryc.cn/news/262142.html

相关文章:

  • 大模型应用_PrivateGPT
  • [Android] ubuntu虚拟机上搭建 Waydroid 环境
  • LeedCode刷题---滑动窗口问题(二)
  • pycharm依赖管理(不要用pip freeze)
  • [Kafka 常见面试题]如何保证消息的不重复不丢失
  • Java中System.setProperty()用法
  • Eclipse 自动生成注解,如果是IDEA可以参考编译器自带模版进行修改
  • 微信小程序vant安装使用过程中遇到无法构建npm的问题
  • [python]用python获取EXCEL文件内容并保存到DBC
  • Spring Boot 如何配置 log4j2
  • 如何安装docker
  • Linux 之 性能优化
  • 用Go汇编实现一个快速排序算法
  • Spring-整合MyBatis
  • sql宽字节注入
  • 开源 LLM 微调训练指南:如何打造属于自己的 LLM 模型
  • Android hilt使用
  • 2023/12/17 初始化
  • 【算法Hot100系列】三数之和
  • CSS 简介
  • myBatis-plus自动填充插件
  • 746. 使用最小花费爬楼梯 --力扣 --JAVA
  • 使用Verdaccio搭建私有npm仓库
  • 87 GB 模型种子,GPT-4 缩小版,超越ChatGPT3.5,多平台在线体验
  • Golang 数组 移除元素 双指针法 leetcode27 小记
  • c# OpenCV 图像裁剪、调整大小、旋转、透视(三)
  • Kafka相关知识
  • gitlab 通过svn hook 触发
  • 设计模式详解---单例模式
  • 毕设之-Hlang后端架构-双系统交互