zoukankan      html  css  js  c++  java
  • 可观测委托与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有啥区别:

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

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

  • 相关阅读:
    Openresty+redis实现灰度发布
    Nginx keepalived
    Nginx反向代理、负载均衡、动静分离、缓存、压缩、防盗链、跨域访问
    MYCAT扩容
    MYCAT全局序列
    MYCAT分库分表
    MySQL主从复制
    [redis] linux下集群篇(4) docker部署
    [nginx] CORS配置多域名
    [mysql] 归档工具pt-archiver,binlog格式由mixed变成row
  • 原文地址:https://www.cnblogs.com/webor2006/p/11406972.html
Copyright © 2011-2022 走看看