可观测委托与map委托原理详解
在上一次https://www.cnblogs.com/webor2006/p/11369333.html中学习了委托属性,然后它在实际中有四种使用情况:

接下来则学习一下另外两种属性委托的使用。
可观测属性委托(Observable):
先来看一下我们要使用的可观测属性的委托方法的定义:

所以咱们定久一个这个可观测的属性委托:

接着来完成这个lambda表达式参数,它接收三个参数并没有返回值,如下:

接下来咱们来调用一下:

接下来再来回过头读一读它的javadoc的说明:


其中该方法的返回值是:

下面对该接口进行了解一下,其实在之前已经接触过了,打开:

下面读一下它的javadoc:


对于这个observable方法是监听值改变之后的结果,那有没有能监听值改变之前做点东东的么?答案是有的,就是紧挨着observable()方法下面这个:

下面来读一下该方法的说明:


好,下面来试一下该方法:

下面对其进行总结一下:
Delegates.observable接收两个参数:初始值与修改处理器。
处理器会在我们每次对属性赋值时得到调用(在赋值完成之后被调用),处理器本身接收3个参数:被赋值的属性本身,旧的属性值与新的属性值。
Delegates.vetoable的调用时机与Delegates.observable相反,它是在对属性赋值之前被调用,根据Delegates.vetoable的返回结果是true还是false,来决定是否真正对属性进行赋值。
map属性委托【实际使用比较多】:
这是最后一种属性委托,map属性委托它是将属性存储到map中,一种常见的应用场景是将属性值存储到map当中。这通常出现在JSON解析或者一些动态行为。在这种情况中,你可以将map实例作为委托,作为类中属性的委托。
好,下面来看一下它是如何使用的:

接下来调用一下,这里需要构造一个Map对象,得用到一个mapof()函数,不过它的使用跟Java是有点区别的,具体如下:

注意:map中的key的名字要与类中的属性名字保持一致,如果不一致会怎么样,试试:

所以还是先将其还原一下,我们看目前都是给只读属性进行了委托:

那如果是读写属性,它又是如何来委托给map的呢?其实另外还有一个读写的map,下面使用一下:

好,看一下它跟Map有啥区别:

所以此时就不能让编译器来自动推断了,需要显示的指定好它的类型,如下:

所以这就是第一次遇到不能让编译器自动推断的情况,在实际开发中也会遇到类似的,接下来调用一下:

可观测委托与map委托原理详解的更多相关文章
- Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程
上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...
- Influxdb原理详解
本文属于<InfluxDB系列教程>文章系列,该系列共包括以下 15 部分: InfluxDB学习之InfluxDB的安装和简介 InfluxDB学习之InfluxDB的基本概念 Infl ...
- 2. EM算法-原理详解
1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 概率 ...
- CRF(条件随机场)与Viterbi(维特比)算法原理详解
摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...
- Redis原理详解
Redis原理详解 数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redi ...
- Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)
上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...
- I2C 基础原理详解
今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...
- Zigbee组网原理详解
Zigbee组网原理详解 来源:互联网 作者:佚名2015年08月13日 15:57 [导读] 组建一个完整的zigbee网状网络包括两个步骤:网络初始化.节点加入网络.其中节点加入网络又包括两个 ...
- 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解
CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...
- SSL/TLS 原理详解
本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...
随机推荐
- [LeetCode] 639. Decode Ways II 解码方法 II
A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...
- (生鲜项目)02. app与model设计
第一步: 设计app 1. 根据业务需求,设计合适的app板块,这里,我们将拥有goods,trade,user_operation, users四个app 2. 然后去注册app 第二步: 设计us ...
- SpringBoot系列教程web篇之Post请求参数解析姿势汇总
作为一个常年提供各种Http接口的后端而言,如何获取请求参数可以说是一项基本技能了,本篇为<190824-SpringBoot系列教程web篇之Get请求参数解析姿势汇总>之后的第二篇,对 ...
- linux-pdb命令行下python断点调试工具
一般地,我们可以使用如下的方式进入调试(比如我们要调试的源文件为hello.py): 1. 在命令行启动目标程序,加上-m参数. python -m pdb hello.py 这样程序会自动停在第 ...
- ubuntu sh脚本激活conda 虚拟环境
第一步:初始化coda 命令:sudo gedit ~/.bashrc 第二部:复制其中这样一段代码 # >>> conda initialize >>> # !! ...
- 【C++札记】指针数组和数组指针
指针数组: 存储指针的数组,数组找那个的每个一元素都是指针 例: int* p1[4],p2[0]是一个指向int类型的指针 char* p2[4],p1[0]是一个指向char类型的指针 数组指针: ...
- Python基础案例1如何实现对应位置上的元素相乘/相加/相减
如何通过a b得到c 本文以“乘”引入,其他运算,类似.案例逻辑如下: a = [[1, 2, 3], [4, 5, 6], [1, 1, 1]]b = [[1, 1, 2], [1, 3, 2], ...
- django RetrieveModelMixin 查询字段替换
mixins 中RetrieveModelMixin 获取当个实例 其中的主键pk获取,可以通过lookup_field 如:要换成用username字段进行查询 注:替换的字段要有唯一约束 look ...
- python模块知识四 包和logging日志
11.包 包:文件夹下具有__init__.py文件就是一个包,包用来管理多个模块 包的结构如下: bake ├── __init__.py ├── api ├── __init__.py ├── p ...
- Django之拾遗
一.设计模式 1.1 MVC 模型(M)是数据的表述,非真正数据,而是数据接口. 视图(V)是你看到的界面,是模型的表现层,此外还提供了收集用户输入的接口. 控制器(C)控制模型和视图之间的信息流动. ...