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

【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充

序言:

本文详细讲解了关于ArkTs语言中的泛型,其中包含泛型函数、泛型接口、泛型约束、泛型类及其中参数的使用方法,补充了一部分接口相关的知识,包括接口的继承和具体实现,也写到了一些边边角角的小知识,剩余参数和展开运算符,便于我们在实际代码编写中让自己的代码更加简洁,可读性更强。

笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法整理为笔记分享出来,如有代码错误或笔误,欢迎指正。

B站黑马的课程链接:鸿蒙课程介绍_哔哩哔哩_bilibili

往期笔记:

【01】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs基础语法与界面开发基础

【02】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-界面进阶与布局排布(附QQ登陆、得物、京东登陆综合案例+代码)

【03】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-更多布局(弹性/层叠)方式与界面开发综合(附飞狗卡片+B站卡片案例+实战开发支付宝界面+代码)

【04】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs进阶运算符+状态管理(附综合案例美团购物车)

【05】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-条件渲染+if/switch判断与for/while循环(附计数器、京东加购案例)
【06】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-综合案例·生肖抽奖卡具体实现(类似支付宝集五福)
【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式&结构重用  

【08】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Scroll容器与Tabs组件

【09】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Class类基础全解(属性、方法、继承复用、判断)

目录

一.剩余参数和展开运算符

1.剩余参数

2.展开运算符

二.接口补充

1.接口补充-接口继承

2.接口补充-接口实现

三.泛型

1.泛型函数

2.泛型约束

3.多个泛型参数

4.泛型接口

5.泛型类


一.剩余参数和展开运算符

1.剩余参数

1)简介:

剩余参数的语法,我们可以将函数或方法中一个不定数量的参数表示为一个数组。

2)语法及基础代码实例:

①语法:

//剩余参数只能写在最后一位
function 函数名(参数1,参数2,...剩余参数数组){//逻辑代码//之前的参数:挨个获取即可//剩余参数:以数组的形式获取
}

②基础代码实例:

function sum(numA:number,numB:number,...theArgs:number[]){let total=numA+numB;for(const arg of theArgs){total+=arg;}return total;
}
console.log(sum(1,2,3).toString())
console.log(sum(1,2,3,4).toString())

2.展开运算符

1)简介:

处于程序稳定性,以及运行性能考虑,在ArkTs中 ...(展开运算符)只能用在数组上

2)语法及基础代码实例:

const numArr1:number[]=[1,2,3,4]
const numArr2:number[]=[5,6,7]
//合并到一起
const totalArr:number[]=[...numArr1,...numArr2]
console.log(totalArr.toString())

二.接口补充

1.接口补充-接口继承

1)简介:

接口继承使用的关键字是extends。

2)语法及基础代码实例:

①语法

interface 接口1{属性1:类型
}
interface 接口2 extends 接口1{属性2:类型
}

②基础代码实例

interface IAnimal{name:string
}
interface ICat extends IAnimal{color:string
}
const cat:ICat ={name:'布偶猫',color:'白色'
}

2.接口补充-接口实现

1)简介:

可以通过接口结合implements来限制类必须要有某些属性和方法

2)语法及基础代码实例:

①语法

interface 接口{属性:类型方法:方法类型
}class 类 implements 接口{//必须实现 接口中定义的属性、方法,//否则会报错
}

②基础代码实例

interface IDog{name:stringbark:()=>void
}class Dog implements IDog{name:stringfood:stringconstructor(name:string,food:string) {this.name=namethis.food=food}bark(){console.log(`${this.name}一边吃${this.food}一边大叫`)}
}let d1:Dog=new Dog('河马小狗','达犀牛')
d1.bark()

三.泛型

简介:

泛型可以让【函数】等,与多种【不同的类型】一起工作,灵活可复用

通俗一点说就是:类型是可变

1.泛型函数

1)语法

//原函数
function fn1(temp:string):string{return temp
}
function fn2(temp:number):number{return temp
}
function fn3(temp:boolean):boolean{return temp
}
//使用泛型后
function fn<Type>(temp:Type):Type{return temp
}fn<string>('1,2,3')
fn<number>(1)

tips:

ArkTs会根据默认传参,进行类型腿短,动态的配置Type类型参数的值。

但是大家能写全尽量写全,这样会提高代码的可读性。

fn(true)
fn([1,2,3,4,5])

2)基础代码实例1

①练习需求

定义函数,参数是数组(存的类型不定),返回数组长度

②具体代码

function getLength<T>(arr:T[]):number{return arr.length
}
console.log('',getLength<number>([1,2,3,4,5]))
console.log('',getLength<string>(['河马','荷花','大炮']))

3)基础代码实例2

①练习需求

定义函数,参数是数组(存的类型不定),返回数组的最后一项。

②具体代码

function getLate<T>(arr:T[]):T{return arr[arr.length-1]
}
console.log('',getLate([1,2,3,4,5,6,7]))

2.泛型约束

1)简介:

之前的类型参数,可以传递任何类型,没有限制。

如果希望有限制→泛型约束

interface 接口{属性:类型
}
function 函数<Type extends 接口>(){}

2)基础代码实例

interface ILength{length:number
}
function fn<T extends ILength>(param:T){console.log('',param.length)
}
fn<string>('hahahaha')
fn<boolean>(true) //会报错

interface ILength{length:number
}
function fn<T extends ILength>(param:T){console.log('',param.length)
}
fn<string>('hahahaha')
/*fn<boolean>(true)*/
class Desk{length=2
}
let d1=new Desk()
fn<Desk>(d1)

3.多个泛型参数

1)简介:

日常开发的时候,如果有需要,可以添加多个 类型变量

2)基础代码实例

function  funcA<T,T2>(param1:T,param2:T2){console.log('参数1',param1)console.log('参数2',param2)
}
funcA<string,number>('河马',888)
funcA<string[],boolean[]>(['荷花'],[false])

4.泛型接口

1)简介:

定义接口的时候,结合泛型定义,就是泛型接口。

interface 接口<Type>{//内部使用Type
}

2)基础代码实例

interface IdFunc<Type>{//约定有两个方法(id类型不定,可能是string可能是number)//1.传入id值,就返回id值。//2.返回一个ids数组id:(value:Type)=>Typeids:()=>Type[]
}let obj1:IdFunc<number>={id(value){return value},ids(){return[1,2,3,4,5]}
}let obj2:IdFunc<string>={id(value){return value},ids(){return['001','002','003']}
}

5.泛型类

1)简介:

定义类的时候,结合泛型定义,就是泛型类。

class 类名<Type>{//内部可以使用Type
}

2)基础代码实例

//泛型类:定义类的时候,配合泛型一起定义
class Person<T>{id:Tconstructor(id:T) {this.id=id}getId(){return this.id}
}
let p1:Person<string> = new Person('河马')
let p2:Person<number> = new Person(123456789)
console.log(p1.getId())
console.log(p2.getId().toString())

感谢观看。

相关文章:

【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充

序言&#xff1a; 本文详细讲解了关于ArkTs语言中的泛型&#xff0c;其中包含泛型函数、泛型接口、泛型约束、泛型类及其中参数的使用方法&#xff0c;补充了一部分接口相关的知识&#xff0c;包括接口的继承和具体实现&#xff0c;也写到了一些边边角角的小知识&#xff0c;剩…...

2024年09月CCF-GESP编程能力等级认证C++编程一级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制…...

基于多维统计分析与GMM聚类的食品营养特征研究

1.项目背景 在当今社会&#xff0c;随着人们对健康和营养的日益关注&#xff0c;深入了解食品的营养成分及其对人体的影响变得越来越重要&#xff0c;本研究采用了多维度的分析方法&#xff0c;包括营养成分比较分析、统计检验、营养密度分析和高斯混合模型&#xff08;GMM&am…...

SkyWalking 告警功能

SkyWalking 告警功能是在 6.x 版本新增的,其核心由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中。 告警规则 告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件。Webhook(网络钩子):定义当警告触发时,哪些服务终端需要被告知。常用告警规则 …...

国内旅游:现状与未来趋势分析

在当今社会快速发展的背景下&#xff0c;国内旅游更是呈现出蓬勃的发展态势。中国&#xff0c;这片拥有悠久历史、灿烂文化和壮丽山河的广袤土地&#xff0c;为国内旅游的兴起与发展提供了得天独厚的条件。 本报告将借助 DataEase 强大的数据可视化分析能力&#xff0c;深入剖…...

西电25考研 VS 24考研专业课大纲变动汇总

01专业课变动 西安电子科技大学专业课学长看到953网络安全基础综合变为 893网络安全基础综合&#xff0c;这是因为工科要求都必须是8开头的专业课&#xff0c;里面参考课本还是没变的&#xff0c;无非就是变了一个名字 对于其他变动专业课也是同理的 02专业课考纲内容变化 对于…...

【Linux】进程管理:状态与优先级调度的深度分析

✨ 山海自有归期&#xff0c;风雨自有相逢 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1…...

同轴电缆笔记

同轴电缆笔记 射频同轴电缆的阻抗标准为什么是50Ω或75Ω呢&#xff1f; 在PCB设计中&#xff0c;在合理的范围内&#xff0c;传输线阻抗的具体数值并不重要。只要控制好整条传输线的阻抗&#xff0c;不要出现阻抗不连续的情况就好了。设计中的其他因素往往决定了我们用什么样…...

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL74

异步复位同步释放 描述 题目描述&#xff1a; 请使用异步复位同步释放来将输入数据a存储到寄存器中&#xff0c;并画图说明异步复位同步释放的机制原理 信号示意图&#xff1a; clk为时钟 rst_n为低电平复位 d信号输入 dout信号输出 波形示意图&#xff1a; 输入描…...

在Linux系统安装Nginx

注意&#xff1a;Nginx端口号是80(云服务器要放行) 我的是基于yum源安装 安装yum源(下面这4步就好了) YUM源 1、将源文件备份 cd /etc/yum.repos.d/ && mkdir backup && mv *repo backup/ 2、下载阿里源文件 curl -o /etc/yum.repos.d/CentOS-Base.repo ht…...

C初阶(六)--- static 来喽

前言&#xff1a;C语言中有许多关键字&#xff08;关键字是预先保留的标识符&#xff0c;具有特殊意义&#xff0c;不能用作变量 名、函数名等普通标识符。&#xff09; 比如&#xff1a;前面在变量与常量那一节提到的extern 就是一个关键字&#xff0c;应该还记得e…...

Git版本控制工具--关于命令

Git版本控制工具 学习前言 在项目开发中&#xff0c;总是需要多个人同时对一个项目进行修改&#xff0c;如何高效快速地进行修改&#xff0c;且控制各自修改的版本不会和他人的进行重叠&#xff0c;这就需要用到Git分布式版本控制器了 作用 解决了一致性&#xff0c;并发性…...

【iOS】计算器的仿写

计算器 文章目录 计算器前言简单的四则运算UI界面事件的逻辑小结 前言 笔者应组内要求&#xff0c;简单实现了一个可以完成简单四则运算的计算器程序。UI界面则是通过最近学习的Masonry库来实现的&#xff0c;而简单的四则运算内容则是通过栈来实现一个简单的四则运算。 简单…...

报错 libgomp.so.1, needed by vendor/llama.cpp/ggml/src/libggml.so, not found

在安装 xinference时报错 安装命令 pip install "xinference[all]" 报错内容 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 3.7 MB/s eta 0:00:00 INFO: pip is looking at multiple versions of multiprocess t…...

wsl(3) -- USB使用

1. 简介 WSL1中可以直接使用Windows的串口&#xff0c;其对应关系就是COMx对应WSL的/dev/ttySx&#xff0c;例如COM2对应WSL的/dev/ttyS2。WSL2是不支持USB设备的&#xff0c;但可以通过usbipd-win程序将windows上的usb设备映射到wsl2中&#xff0c;参考微软官方文档连接 USB …...

从原理到代码:如何通过 FGSM 生成对抗样本并进行攻击

从原理到代码&#xff1a;如何通过 FGSM 生成对抗样本并进行攻击 简介 在机器学习领域&#xff0c;深度神经网络的强大表现令人印象深刻&#xff0c;尤其是在图像分类等任务上。然而&#xff0c;随着对深度学习的深入研究&#xff0c;研究人员发现了神经网络的一个脆弱性&…...

从零开始学习OMNeT++系列第一弹——OMNeT++的介绍与安装

最近由于由于工作上的需求&#xff0c;接了一个网络仿真的任务。于是开始调研各个仿真平台&#xff0c;然后根据目前的需求和网络上公开资料的多少&#xff0c;决定使用omnet这个网络仿真平台。现在也是刚开始学习&#xff0c;所以决定记录一下从零开始的这个学习过程。因为虽然…...

Cluster Explanation via Polyhedral Descriptions

通过多面体描述进行聚类解释 本文关注聚类描述问题&#xff0c;即在给定数据集及其聚类划分的情况下&#xff0c;解释这些聚类的任务。我们提出了一种新的聚类解释方法&#xff0c;通过在每个聚类周围构建一个多面体&#xff0c;同时最小化最终多面体的复杂性或用于描述的特征…...

爬虫设计思考之一

爬虫设计思考之一 经常做爬虫的人对于技术比较的执着&#xff0c;尤其是本身从事的擅长的技术领域&#xff0c;从而容易忽视与之相近或者相似的技术。因此我建议大家在遇到此类问题的时候&#xff0c;可以采用对比分析的方式来理解。 本次的思考是基于国内最大的中文搜索引擎百…...

解决centos 删除文件后但空间没有释放

一、问题描述&#xff1a;磁盘空间不足&#xff0c;清理完垃圾日志以后磁盘空间还是没有释放 查看磁盘空间 [rootxwj-qt-65-44 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G …...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...