泛型
泛型类 [T]
| def main(args: Array[String]): Unit = { |
| |
| |
| val s1 = new Student("丽萨",1) |
| |
| val s2 = new Student[String,Int]("明明",2) |
| |
| val s3 = new Student[Any,Any]("小刚",3) |
| } |
| |
| |
| class Student[T,S](info1: T, info2: S){ |
| println(info1,info2) |
| } |
泛型函数 [T]
| def fun[T](field: T): Unit ={ |
| println(field) |
| } |
泛型边界 [T <: 父类] [T >: 子类]
- <: 指明上界,表达了泛型的类型必须是"某种类型"或某种类型的"子类"
- >: 指明下界,表达了泛型的类型必须是"某种类型"或某种类型的"父类"
| def main(args: Array[String]): Unit = { |
| |
| up[C2](new C2) |
| |
| |
| |
| |
| |
| down[C3](new C3) |
| |
| } |
| |
| |
| def up[T <: C2](field: T): Unit = { |
| println("Up") |
| } |
| |
| |
| def down[T >: C2](field: T): Unit = { |
| println("Down") |
| } |
| |
| |
| class C1 {} |
| |
| class C2 extends C1 { |
| println("C2 < C1") |
| } |
| |
| class C3 extends C2 { |
| println("C3 < C2 < C1") |
| } |
| |
| class C4 { |
| println("C4") |
| } |
视图界定
| |
| def view[T <% Comparable[T]](first: T, second: T): Unit = { |
| println(first.compareTo(second)) |
| } |
| |
| |
| |
| view[Int](4, 2) |
协变和逆变

协变
| class C1 {} |
| |
| class C2 extends C1 { |
| println("C2 < C1") |
| } |
| |
| |
| val child = new C5[C2](new C2) |
| val parent: C5[C1] = child |
| |
| |
| class C5[+T](field: T) {} |
逆变
| class C1 {} |
| |
| class C2 extends C1 { |
| println("C2 < C1") |
| } |
| |
| |
| class C6[-T](field: T) {} |
| |
| |
| val parent1 = new C6[C1](new C1) |
| val child1: C6[C2] = parent1 |
隐式转换
| |
| implicit def doubleToInt(d: Double) = d.toInt |
| |
| val i: Int = 3.14 |
| println(s"i = $i") |
说明: implicit def 方法名(变量名: 转换的类型) = 返回的转换结果
隐式转换发生的时机
需要的参数的类型与实际类型不一致时
| def fun(x: Int) = {} |
| |
| fun(3.14) |
调用对象不存在的方法时
| class C1 { |
| def fun() = {} |
| } |
| |
| val c = new C1() |
| c.read() |
隐式参数
| def main(args: Array[String]): Unit = { |
| |
| |
| implicit val c = new C1() |
| |
| funC("log!") |
| } |
| |
| def funC(info: String)(implicit c1: C1): Unit = { |
| c1.fun(info) |
| } |
| |
| class C1 { |
| def fun(info: String) = { |
| println("fun info = " + info) |
| } |
| } |
参考: https://www.cnblogs.com/jacksu-tencent/p/4979666.html
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· Supergateway:MCP服务器的远程调试与集成工具
· C# 13 中的新增功能实操