Kotlin属性引用详解
继续来学习Kotlin反射相关的,这次主要是跟反射属性相关的东东。
属性引用(Property Reference):
属性引用的用法与函数(方法)引用的用法是完全一致,都是通过::形式来引用的。下面看代码:
其实这个属性引用就类似于在Java反射属性的方式差不多,目的都是通过反射来操作属性的一些东东, 其中"::a"其实表示的是类型KProperty<Int>的属性对象,那们我们可以通过get()来获取其值,也可以通过name属性来获取其名字,下面来看一下KProperty的细节:
就如我们程序中所写的:
那这个get()方法是在哪定义的呢?
那。。name属性又在哪定义的呢?
在上面代码中a是定义成了一个常量,那如果定义一个变量呢, 比如:
其实对于可变属性来说,比如说 var b = 5,::b返回的是类型KMultipleProperty<Int>的值,它拥有一个set()方法。下面来调用一下:
那。。KMutableProperty跟KProperty有啥关系呢?瞅一下:
属性引用在函数的应用:
其实属性引用也是可以用在函数上的,下面看个例子:
下面来分析一下该程序,length是String类中定义的一个属性:
而map方法接收的是一个Lambda表达式:
其中T参数就代表集合中的每一个String的元素,而R则为整个函数返回的值,那咱们传的是一个属性引用其执行的机制是咋样的呢?其实是这样的:每个元素都传给map的T,然后再调用它的.lenth属性来作为函数R的返回值,需好好体会一下,有点不太好理解。
我们现在定义的属性都是没有接收者的,如下:
那如果将属性定义在一个类当中,也就是有接收者,那其属性引用的使用又会发生啥变化呢,看代码:
下面来定义一个属性引用:
此时如果想打印MyClass中的x属性的值,则需要传一个接收者MyClass了,因为该属性不是包级别的了,如下:
具体调用如下:
所以总结一下:如果想要访问一个类中的成员属性,需要使用全限定名称才行。
扩展属性:
下面咱们给String系统类添加一个扩展属性:
该属性是获取字符串的第一个字符,那对于一个字符串想用字符引用的方式来调用下该如何调用呢?下面瞅下:
Kotlin属性引用详解的更多相关文章
- C++引用(&)详解
C++引用详解 引用的概念 引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符 &引用名=目标变量名: 如下:定义引用ra,它是变量a的引 ...
- Android——TextView属性XML详解
Android_TextView属性XML详解 博客分类: android 属性名称 描述 android:autoLink 设置是否当文本为URL链接/email/电话号码/map时 ...
- ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy)
ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy) 在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了, ...
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate) 在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾 ...
- php中关于引用(&)详解
php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...
- CSS3教程:pointer-events属性值详解 阻止穿透点击
转:http://www.poluoluo.com/jzxy/201109/142876.html 在某个项目中,很多元素需要定位在一个地图层上面,这里就要用到很多绝对定位或者相对定位的元素,但是这样 ...
- Delphi中TStringList类常用属性方法详解
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...
- CSS定位属性Position详解
CSS中最常用的布局类属性,一个是Float(CSS浮动属性Float详解),另一个就是CSS定位属性Position. 1. position:static 所有元素的默认定位都是:position ...
- js原生之scrollTop、offsetHeight和offsetTop等属性用法详解
scrollTop.offsetHeight和offsetTop等属性用法详解:标题中的几个相关相关属性在网页中有这大量的应用,尤其是在运动框架中,但是由于有些属性相互之间的概念比较混杂或者浏览器兼容 ...
随机推荐
- oracle python操作 增删改查
oracle删除 删除表内容 truncate table new_userinfo; 删除表 drop table new_userinfo; 1.首先,python链接oracle数据库需要配置好 ...
- Spring security oauth2 password flow
Spring security oauth2 包含以下两个endpoint来实现Authorization Server: AuthorizationEndpoint: 授权请求访问端点, 默认url ...
- 【转帖】Intel AMD 龙芯2019年12月份最新产品线
Intel未来三代U集体曝光:14nm退回去了! https://news.cnblogs.com/n/651244/ 不过没搞懂 为啥中芯国际已经开始量产14nm了 龙芯为什么不用.. 3A4000 ...
- 为何一个@LoadBalanced注解就能让RestTemplate拥有负载均衡的能力?【享学Spring Cloud】
每篇一句 你应该思考:为什么往往完成比完美更重要? 前言 在Spring Cloud微服务应用体系中,远程调用都应负载均衡.我们在使用RestTemplate作为远程调用客户端的时候,开启负载均衡极其 ...
- 长乐国庆集训Day5-2
T1 彩虹 题目 [题目描述] Mr.Raju和他的一个大家庭外出度假,他们想要乘着彩虹欣赏周围的景色,但是这样最会有一些问题. 在他们家族中,如果一个人想要骑上彩虹,那么他喜欢的所有人和喜欢他的所有 ...
- Tr/ee AtCoder - 4433 (构造)
大意: 给定长$n$的字符串$s$, 要求构造一棵树, 满足若第$i$个字符为$1$, 那么可以删一条边, 得到一个大小为$i$的连通块. 若为$0$则表示不存在一条边删去后得到大小为$i$的连通块. ...
- Flink WorkCount代码
Flink-scala所需依赖 <properties> <flink.version>1.7.0</flink.version> </properties& ...
- Spring boot java.lang.NoClassDefFoundError: org/springframework/boot/bind/RelaxedPropertyResolver
Spring boot 2.0.3 RELEASE 配置报错 java.lang.NoClassDefFoundError: org/springframework/boot/bind/Relaxed ...
- 【转载】 C#使用Newtonsoft.Json组件来反序列化字符串为对象
在Asp.Net网站开发的过程中,很多时候会遇到对象的序列化和反序列化操作,Newtonsoft.Json组件是专门用来序列化和反序列化操作的一个功能组件,引入这个DLL组件后,就可使用JsonCon ...
- react学习记录(一)
一.React是什么 声明式写法(强调结果,命令式编程强调过程) 组件化 一次学习,随处编写(多种应用场景,web程序,原生手机应用,系统应用,命令行工具) 二.为什么学习react 大公司加持-fa ...