网站首页 > 基础教程 正文
trait对象是动态大小的类型
一般代码形式是一个可选的dyn关键字后面跟着一组trait
其中除了第一个trait
都是autotrait。
而且最多一个生命时间
optout bound (? Sized)是不允许的
trait对象的使用目的
一般在需要延迟绑定的时候
trait对象的一个函数指针
会被从trait对象虚拟表里加载
并分发出去
这就是动态
也就达到了trait对象的方法调用
不像泛型是在编译时期是静态的
main函数里的转换的对象
就是trait对象。
trait对象和结构枚举对象不同
结构和枚举的方法要定义在impl里
trait对象不能包含字段来存数据
只能有方法
它的作用就是用来共同行为的抽象
但是它和泛型参数的结构是不一样的
泛型一次只能用一个具体类型替代
trait对象允许多个类型
比如一个数组里
可以有实现了trait对象的不同的类型
但是泛型参数的类型
只能有具体的一个
可见trait对象可以做到更泛化
trait对象是对象安全的trait
也就是说trait的方法不能返回Self
并且没有泛型参数
这是因为Self是具体自己
泛型参数需要被具体类型替代
而rust trait对象是不知道具体trait对象类型的
也就不知道Self和泛型参数具体类型
你知道的Java,Python,C语言,kotlin语言里有类似功能吗
欢迎关注评论。交流学习。
猜你喜欢
- 2024-11-19 1-0 Protobuf通信协议.proto文件编写
- 2024-11-19 阿里P8资深架构师耗时一年整理19年Java工程师成神之路
- 2024-11-19 Java修炼终极指南:83. 声明一个Java记录
- 2024-11-19 Effective Java 3rd(Java高效编程)技术要点
- 2024-11-19 Spring源码系列(二)
- 2024-11-19 Java 14 发布了,快来了解下吧
- 2024-11-19 Spring技巧:深入研究Java 14和SpringBoot
- 2024-11-19 IntelliJ IDEA 2023.2 最新变化
- 2024-11-19 数据结构与算法 #18 下跳棋,极富想象力的同向双指针模拟
- 2024-11-19 Spring Bean生命周期你除了会背八股文面试,真的会用了吗?
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)