在上一次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委托原理详解的更多相关文章

  1. Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程

    上文,我们看了IOC设计要点和设计结构:紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的. ...

  2. Influxdb原理详解

    本文属于<InfluxDB系列教程>文章系列,该系列共包括以下 15 部分: InfluxDB学习之InfluxDB的安装和简介 InfluxDB学习之InfluxDB的基本概念 Infl ...

  3. 2. EM算法-原理详解

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 概率 ...

  4. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  5. Redis原理详解

    Redis原理详解 数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redi ...

  6. Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)

    上文,我们看了IOC设计要点和设计结构:以及Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的:容器中存放的是Bean的定义即Be ...

  7. I2C 基础原理详解

    今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...

  8. Zigbee组网原理详解

    Zigbee组网原理详解 来源:互联网 作者:佚名2015年08月13日 15:57   [导读] 组建一个完整的zigbee网状网络包括两个步骤:网络初始化.节点加入网络.其中节点加入网络又包括两个 ...

  9. 块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解

    CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inli ...

  10. SSL/TLS 原理详解

    本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...

随机推荐

  1. 【python开发】利用PIP3的时候出现的问题Fatal error in launcher: Unable to create process using '"'

    down voteaccepted I fixed my issue by... downloading Python 3 at the official website and installing ...

  2. 16 JQuery---JavaScript框架

    1.JQuery概念一个JavaScript框架.简化JS开发JQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScr ...

  3. LeetCode | 142. 环形链表 II

    原题(Medium): 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始) ...

  4. 14.Python略有小成(自由模块)

    Python(模块) 一.模块定义与分类 ​ 我们说一个函数就是一个功能,那么把一些常用的函数放在一个py文件中,这个文件就称之为模块,模块,就是一些列常用功能的集合体,模块就是文件,存放一堆常用的函 ...

  5. Eclipse访问外部网站(比如:CSDN首页)

    其实这个感觉没什么用,毕竟我们都有浏览器,而且浏览器界面还比较宽,方便.只是好奇.所以记录一下.效果如下: 有两种方法,方法一是永久的,方法二是一次性的. 方法一(永久): 1.在工具栏找" ...

  6. AVR单片机教程——拨动开关

    在按键的上方有4个拨动开关.开关与按键,在原理和使用方法上都是很类似的,但有不同的用途——按键按下后松开就会弹起,而开关可以保存其状态. <switch.h> 定义了与开关相关的函数.sw ...

  7. 【LEETCODE】47、985. Sum of Even Numbers After Queries

    package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...

  8. 【LEETCODE】39、第561题 Array Partition I

    package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...

  9. Android--Bitmap处理、圆角、圆形

    /** * 转换图片成圆形 * * @param bitmap * 传入Bitmap对象 * @return */ public static Bitmap toRoundBitmap(Bitmap ...

  10. c# 基于委托的异步编程模型(APM)测试用例

    很多时候,我们需要程序在执行某个操作完成时,我们能够知道,以便进行下一步操作. 但是在使用原生线程或者线程池进行异步编程,没有一个内建的机制让你知道操作什么时候完成,为了克服这些限制,基于委托的异步编 ...