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等属性用法详解:标题中的几个相关相关属性在网页中有这大量的应用,尤其是在运动框架中,但是由于有些属性相互之间的概念比较混杂或者浏览器兼容 ...
随机推荐
- CentOS / RHEL 内核升级
1. 查看当前内核版本 [root@192.168.118.11 ~]#cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) [ro ...
- YII2框架集成go!aop
AOP实践:YII2框架本身拥有一个功能,叫做行为.它可以动态的为当前的类附加额外的功能,但这种功能在代码层级结构是静态的,有侵入性的. 下面以YII2框架集成go!aop库为例,介绍在YII2中如何 ...
- 从支付宝SDK的支付流程理解什么是公钥和私钥,什么是加密和数字签名
------------------- 这是自己总结: 支付宝SDK支付用到的公钥与私钥整理如下: 1.商户应用公钥 2.商户应用私钥 3.支付宝公钥 4.支付宝私钥 商户应用的公钥与私钥生 ...
- k8s-job使用
一.job特性 运行完成后退出,但是不会被删除,便于用户查看日志信息,了解任务完成的情况 删除job时产生的pod也会被一起删除 job中可以运行多个pod(任务执行多次),且可以并行运行缩短任务完成 ...
- jquery ajax分页写法
jquery ajax分页写法我用的是laypage插件 前端代码<pre> function demo(curr) { $.getJSON('/home/index/getinfo', ...
- 033 SSM综合练习09--数据后台管理系统--基于AOP的日志处理
1.数据库与表结构 (1)日志表信息描述sysLog (2)Sql语句 CREATE TABLE sysLog ( id ) DEFAULT SYS_GUID () PRIMARY KEY, visi ...
- 17 SpringMVC response响应
1.Model.ModelMap和ModelAndView的使用详解 Spring-MVC在请求处理方法可出现和返回的参数类型中,最重要就是Model和ModelAndView了,对于MVC框架,控制 ...
- Vue 动态路由的实现以及 Springsecurity 按钮级别的权限控制
思路: 动态路由实现:在导航守卫中判断用户是否有用户信息,通过调用接口,拿到后台根据用户角色生成的菜单树,格式化菜单树结构信息并递归生成层级路由表并使用Vuex保存,通过 router.addRout ...
- DRF框架(六)——三大认证组件之认证组件、权限组件
drf认证组件 用户信息表 from django.db import models from django.contrib.auth.models import AbstractUser class ...
- 四则运算自动出题之javaweb版
四则运算出题机之JAVAWEB版 要求还是和之前的出题形式一样 begin.jpg <%@ page language="java" contentType="te ...