视图界定的介绍应用实例3 | 学习笔记

简介: 快速学习视图界定的介绍应用实例3

开发者学堂课程【Scala 核心编程 - 进阶:视图界定的介绍应用实例3】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9157


视图界定的介绍应用实例3


视图界定应用案例3

说明:

自已写隐式转换结合视图界定的方式,比较两个 Person 对象的年龄大小。

//隐式将Student->Ordered[Person2/放在object Mylmplicit中implicit def person22OrderedPerson2(person: Person2) = new Ordered[Person2]{

override def compare(that: Person2):Int =person.age-that.age

}

val p1 = new Person2("tom", 110)

val p2 =new Person2(iack" 20)

import Mylmplicit._val compareComm3 =new CompareComm2(p1,p2) printin(compareComm3.geatter)

class Person2(val name: String,val age: Int){

override def toString =this.name +"\t" + this.age

class CompareComm3[T<% Ordered[T]](obj1: Tobj2: T){

def geater = if (obj1 > obj2) obj1 else obj2

新建包:

image.png

package com.atguigu.chapter18.viewbounds

object ViewBoundsDemo03 {

def main(args: Array [string]): Unit = {

val p1 = new Person3("tom" 10)

val p2 = new Person3("jack", 20)val compareComm3=newCompareComm3(p1p2) println(compareComm3.getter)//这样执行肯定是要报错的

}

}

class Person3(val name: String,val age:Int)

//这里是重写tostring,为了显示方便

override def toStringString =this.name +"\t" + this.age}

}

//说明

//1. T<% OrderedT] 表示T是ordered子类型 java.lang.Comparable

//2. 这里调用的compareTo方法是T这个类型的方法

class CompareComm3[T<% Ordered[T](obj1:Tobj2:T){

def getter = if (obj1 > obi2) obj1 else obi2

def geatter2 = if (obj1.compareTo(obj2) > 0) obi1 else obj2

}

报错的解决方案:写隐式函数,专门写在一个地方:

image.png

package com.atguigu.chapter18.viewbounds

object MyImplicit {implicit def person3toOrderedPerson3(p3:Person3) = new Ordered[Person3] {

override def compare(that: Person3)= { //是你自己的业务逻辑 p3.age - that.age

}

}

}

只要把 MyImplicit 引进来就可以用了:

image.png

点击运行:

image.png

不引是运行不了的。

以上就是视图界定的第三个案例。

相关文章
|
4月前
|
应用服务中间件 Java Maven
掌控视图的力量!深入解析 JSF 视图管理,揭秘视图生命周期的秘密,让你的应用更高效!
【8月更文挑战第31天】JavaServer Faces (JSF) 是一种强大的框架,用于管理 Web 应用程序的视图。本文通过具体案例介绍 JSF 视图管理的基础知识,包括创建、管理和销毁视图的过程。首先,在 Eclipse 中创建一个新 JSF 项目,并配置 Maven 依赖。接着,在 `WEB-INF` 目录下配置 `web.xml` 文件,设置 JSF servlet。
60 0
|
4月前
|
存储 开发框架 前端开发
EAV模型(实体-属性-值)的设计和低代码的处理方案(3)-- 实体属性定义及前端列表展示和数据录入处理
EAV模型(实体-属性-值)的设计和低代码的处理方案(3)-- 实体属性定义及前端列表展示和数据录入处理
|
Scala 开发者
视图界定的介绍应用实例2 | 学习笔记
快速学习视图界定的介绍应用实例2
视图界定的介绍应用实例2 | 学习笔记
|
Scala 开发者
视图界定的介绍应用实例1 | 学习笔记
快速学习视图界定的介绍应用实例1
视图界定的介绍应用实例1 | 学习笔记
|
编译器 Scala 开发者
上下文界定介绍和应用实例 | 学习笔记
快速学习上下文界定介绍和应用实例
上下文界定介绍和应用实例 | 学习笔记
|
JavaScript 开发者 容器
路由-使用命名视图实现经典布局|学习笔记
快速学习路由-使用命名视图实现经典布局
路由-使用命名视图实现经典布局|学习笔记
|
前端开发 网络架构
前端工作总结151-动态路由和表结构无关
前端工作总结151-动态路由和表结构无关
106 0
|
关系型数据库 测试技术 流计算