首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin 扩展函数扩展属性使用方法

Kotlin 能够扩展一个类的新功能而无需继承该类或者使用像装饰者这样的设计模式。 这通过叫做 扩展 的特殊声明完成。 例如,你可以为一个你不能修改的、来自第三方库中的类编写一个新的函数。...这个新增的函数就像那个原始类本来就有的函数一样,可以用普通的方法调用。 这种机制称为 扩展函数 。此外,也有 扩展属性 , 允许你为一个已经存在的类添加新的属性。...我们没有动源码,而是使用拓展函数的方式为Int增加了一个方法。...扩展属性 扩展属性扩展函数类似,再举上面Person 的例子,我们对 Person 类稍作修改,为其增加 birthdayYear 字段,表示其出生的年份。...可以看到,age 是一个属性,而不是方法。这样我们就为 Person 增加了一个扩展属性。可以看看它转化为 Java 代码后的样子,和扩展函数没啥区别。

2.4K40

第6章 扩展函数属性第6章 扩展函数属性

第6章 扩展函数属性使用Java的时候,我们经常使用诸如StringUtil, DateUtil等等一堆工具类,代码写起来也比较冗长。举个例子,获取一个字符串的第一个字符值、最后一个字符值。...本章我们介绍Kotlin的扩展函数属性。 6.1 扩展函数 Kotlin中提供了非常简单使用扩展函数功能。我们可以为现有的类自由添加自定义函数 。...6.2 扩展属性 除了扩展一个类的函数,我们还可以扩展属性。...扩展属性的语法 然后,我们就可以在代码中直接使用扩展属性了 val list = mutableListOf(1, 2, 3, 4, 5, 6, 7) println("list =...本章小结 扩展函数是Kotin非常方便实用的功能,使用扩展函数,我们的代码写起来也更加简单优雅。

44220
您找到你想要的搜索结果了吗?
是的
没有找到

C#使用IExtenderProvider为控件添加扩展属性,像ToolTip那样

ToolTip的属性出来,如图: 本文要说的就是如何像ToolTip这样,为控件“扩展”出一个属性来(之所以用引号,是因为并不是真的为控件增加了一个属性,而是在VS中看起来像那么回事)。...那么到底是要给什么类扩展出什么属性呢,这是由ProvideProperty特性定义的,本类的目的是为【ToolStripItem】类扩展出一个叫【Describe】的属性,所以这样描述[ProvideProperty...这方法纯粹是供VS用的,方法的逻辑是,当你在VS中点击某个控件时,extendee就是该控件,返回true则在该控件的属性窗格中添加扩展属性,否则不添加。...那该方法在什么情况下需要加逻辑呢,举例,要为Button和TextBox扩展属性,自然ProvideProperty限定为Control较合适,但这样一来,不属于Button和TextBox的其它控件也被扩展了...同时可以看出ProvideProperty特性可以叠加使用,达到为不同控件添加不同扩展属性的目的,话说之所以不写成为Component扩展Describe属性,是因为MenuItem只有鼠标移进事件(Select

1.6K20

【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )

文章目录 一、扩展函数简介 二、为 Any 超类定义扩展函数 三、private 私有扩展函数 四、泛型扩展函数 五、标准函数 let 函数是泛型扩展函数 六、扩展属性 七、可空类扩展 八、使用 infix...增加类的功能 ; Kotlin 中如果类 没有被 open 关键字修饰 , 则该类 不能被继承 , 如果想要扩展该类 , 可以使用 扩展函数 ; 扩展函数 可以作用于 自定义的类 , 也可以作用于 系统自带的类...定义 扩展函数 , 此外还可以 给现有类定义 扩展属性 ; 为现有类定义 扩展属性 语法格式为 : val 现有类类名.扩展属性名: 扩展属性类型 get() = {} var 现有类类名.扩展属性名...: 扩展属性类型 get() = {} set() = {} 扩展属性 不能 进行初始化 , 必须在 getter 函数中进行初始化 ; val 只读类型变量 扩展属性 必须提供 getter...函数 ; var 可变类型变量 扩展属性 必须提供 getter 和 setter 函数 ; 代码示例 : 在该代码中 , 为 String 类型定义了 扩展属性 extAttribute , 由于是

2.1K30

【Kotlin】扩展函数 ② ( 扩展属性 | 为可空类型定义扩展函数 | 使用 infix 关键字修饰单个参数扩展函数的简略写法 )

文章目录 一、扩展属性 二、可空类扩展 三、使用 infix 关键字修饰单个参数扩展函数的简略写法 一、扩展属性 ---- 上一篇博客 【Kotlin】扩展函数 ( 扩展函数简介 | 为 Any 超类定义扩展函数...| private 私有扩展函数 | 泛型扩展函数 | 标准函数 let 函数是泛型扩展函数 ) 中 , 介绍了给 现有类 定义 扩展函数 , 此外还可以 给现有类定义 扩展属性 ; 为现有类定义 扩展属性...; 注意下面的调用细节 : 如果定义的 扩展函数 是 为 非空类型定义的 , 可空类型变量 想要调用该 扩展函数 , 在调用时使用 " ?....非空类型扩展函数 如果定义的 扩展函数 是为 可空类型定义的 , 可空类型变量 想要调用该 扩展函数 , 在调用时直接使用 " . " 进行调用即可 ; 可空类型实例对象.可空类型扩展函数 代码示例...和 参数列表的括号 ; 调用 使用 infix 关键字修饰 的 单个参数扩展函数 : 接收者 函数函数参数 也可以使用 传统方式调用 : 接收者.函数名(函数参数) Map 中 创建 的 Pair

1.9K30

【Android Gradle 插件】Gradle 扩展属性 ① ( Gradle 扩展属性简介 | Gradle 自定义 task 任务示例 )

文章目录 一、Gradle 扩展属性简介 二、Gradle 自定义 task 任务示例 ( 扩展属性示例 ) Android Plugin DSL Reference 参考文档 : Android Studio...Project 属性 , 就需要用到 扩展属性 机制 ; 在 build.gradle 中直接使用 Groovy 代码即可实现 对 Project 类的扩展 ; 在 Groovy 中定义普通属性代码如下...: 普通属性是局部变量 , 只能在本构建脚本中使用 ; // 定义普通属性 def hello = 'Hello World!'...在 Groovy 中定义扩展属性代码如下 : 扩展属性是全局变量 , 对所有子项目可见 ; // 定义扩展属性 , 其中的变量对所有子项目可见 ext { hello1 = 'Hello World1...} 二、Gradle 自定义 task 任务示例 ( 扩展属性示例 ) ---- 在 build.gradle 中定义 变量 , 然后自定义 task 任务 , 输出该变量 , 代码如下 : // 定义局部变量

67620

【Android Gradle 插件】Gradle 扩展属性 ② ( 定义在根目录 build.gradle 中的扩展属性 | 使用 rootProject.扩展属性名访问 | 扩展属性示例 )

文章目录 一、定义在根目录 build.gradle 中的扩展属性 二、扩展属性示例 Android Plugin DSL Reference 参考文档 : Android Studio 构建配置官方文档...build.gradle 根配置 ) 文档 : https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html 如果将 ext 扩展属性放到...中可以使用 rootProject.扩展属性名 来访问定义在根目录中 build.gradle 中定义的扩展属性值 ; 二、扩展属性示例 ---- 在根目录下的 build.gradle 中定义扩展属性...: // 定义扩展属性 , 其中的变量对所有子项目可见 ext { hello1 = 'Hello World1!'...going to shut down soon } } task clean(type: Delete) { delete rootProject.buildDir } // 定义扩展属性

2.9K20

Kotlin中的扩展函数属性示例详解

前言 Kotlin 中类的扩展方法并不是在原类的内部进行拓展,通过反编译为Java代码,可以发现,其原理是使用装饰模式,对源类实例的操作和包装,其实际相当于我们在 Java中定义的工具类方法,并且该工具类方法是使用调用者为第一个参数的...相反,如果要使用它,需要进行导入,就像其他任何的类或者函数一样。这是为了避免偶然性的命名冲突。...,可以使用更具体的类型来作为接收者类型,而不是一个类。...3.3.5扩展属性 val String.lastChar: Char get() = get(this.length - 1) 和扩展函数一样,扩展属性也像接收者的一个普通成员属性一样。...注意,当需要从Java中访问扩展属性的时候,应该显式地调用它的getter函数:StringUtil.getLastChar(“Java”); 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值

1.3K20

HDK扩展自定义VEX函数print

VEX中有两种可以调试代码查看变量值的方法,一种通过printf函数来查看变量值,一种是创建属性进到SpreadSheet面板查看变量值,像下面这样 演示效果: 而printf函数往往太繁琐,这里自定义一个...print函数来打印各种类型的变量值(类似Python中的print函数) 演示效果: 此处的print函数是通过C++来自定义的VEX函数,下面来看具体如何实现,有些细节我就不累述了,可以参看前面几篇文章...build文件夹中shift+右键输入指令编译vs工程(此处需要安装cmake和VS2015才能正确执行) Step 4、执行下面的指令编译VEX_Example.dll链接库并打开Houdini就可以使用...print函数了。...关于自定义VEX函数的一套规则文档 关于hconfig -ap查看HOUDINI_VEX_DSO_PATH环境变量 关于dsoinfo -v查看自定义VEX函数

1.3K80

JMeter扩展开发:自定义函数

强大的扩展性是压力测试工具 JMeter 的一个重要特点。虽然本身内置的函数、协议支持有限,但是 JMeter 提供了良好的扩展框架,允许使用者对其进行扩展。...本文将介绍如何利用 JMeter 的扩展性来实现自定义函数,用户可以通过此方式扩展出性能测试过程中所需要的函数功能。...;将编译好的包拷贝至 JMeter 的扩展目录,编辑测试脚本,在脚本中使用自定义函数;运行自定义函数,查看运行结果是否正确。...接下来我们将以一个返回随机偶数的自定义函数为例,来带大家了解完整的开发过程。创建扩展 JMeter 项目本例中将使用 Maven 来管理依赖并进行打包。...图片测试自定义函数最后我们创建一个测试,来验证该 JMeter 函数工作是否正常,我们将使用 Dummy Sampler 作为测试用的取样器。

58150

C#学习笔记五: C#3.0自动属性,匿名属性扩展方法

Person 2 { 3 //使用自动实现的属性来定义属性 4 //定义可读写属性 5 public string Name{get; set;} 6 //定义只读属性...之所以可以这样定义属性, 主要是因为编译器在编译时会为我们创建一个私有字段. 利用反编译工具可以知道使用自动实现的属性时,C#都会帮我们创建必要的字段....另外在结构体中使用自动属性时, 需要注意的是所有构造函数都需要显式地调用无参构造函数this, 否则会出现编译错误. 因为只有这样,编译器才能知道所有的字段都已经被赋值....由此可以想到,要使用对象初始化器,则必须保证类中具有一个无参构造函数. 如果我们自定义了一个有参构造函数而把默认的无参构造函数覆盖了, 则需要重新定义一个无参构造函数...., 即指方法对这个类型进行扩展) (4)第一个参数不能使用任何其他修饰符(如不能使用ref out等) 1 namespace CurrentNameSpace 2 { 3 //要想使用不用命名空间下的扩展方法

800100

C#扩展方法原理及其使用

以下为主要内容: 什么是扩展方法 扩展方法原理及自定义扩展方法 扩展方法的使用及其注意事项 2、什么是扩展方法 一般而言,扩展方法为现有类型添加新的方法(从面向对象的角度来说,是为现有对象添加新的行为...扩展方法是静态的,它的使用和其他实例方法几乎没有什么区别。常见的扩展方法有Linq扩展、有IEnumerable扩展等。...是不是感觉扩展方法很优美,使用起来和实例方法几乎没有区别。...不得不说.NET在这方面做得很精致,很让人钦佩,那么接下来我们来看看扩展方法的原理 3、扩展方法原理及自定义扩展方法 首先我们,先看看如何自定义扩展方法 ?...4、扩展方法的使用及其注意事项 扩展方法虽然很好用,但是如果我们扩展的对象发生了版本迭代,则会增加扩展方法失效的风险。

1.5K20

【Android Gradle 插件】Gradle 自定义 Plugin 插件 ④ ( 为自定义 Gradle 插件的扩展配置扩展 | 在自定义插件中获取扩展属性 )

文章目录 一、Android Gradle 插件扩展扩展 二、为自定义 Gradle 插件的扩展配置扩展 并 获取扩展属性 Android Plugin DSL Reference 参考文档 : Android...Plugin 插件 的 Extension 扩展 中 , 再 定义一层 Extension 扩展 ; 二、为自定义 Gradle 插件的扩展配置扩展 并 获取扩展属性 ---- 定义扩展类 : class...def name def age } 声明扩展扩展扩展 : 通过调用 project.扩展名.扩展属性 可获取在构建脚本中配置的 扩展属性 , 通过调用 project.扩展名.扩展扩展名....扩展属性 可获取在构建脚本中配置的 扩展属性扩展属性 ; import org.gradle.api.Plugin import org.gradle.api.Project class MyPlugin...) // 获取 自定义 Gradle 插件的扩展属性 , 必须在 Gradle 分析完成之后才能进行 , 否则获取不到 project.afterEvaluate {

2K10

添加和使用XSLT扩展函数

自定义错误处理当出现错误时,XSLT处理器(Xalan或Saxon)执行当前错误处理程序的error()方法,将消息作为参数发送到该方法。...of the parameter named by parameter_name添加和使用XSLT扩展函数可以在InterSystems IRIS中创建XSLT扩展函数,然后在样式表中使用它们,如下所示...要添加和使用XSLT扩展函数,请执行以下操作:对于Xalan或Saxon处理器,在创建%XML.XSLT.CallbackHandler的子类。在这个子类中,根据需要实现evaluate()方法。...%New(tStream) Quit return}在样式表中使用计算要在XSLT中使用XSLT扩展函数,必须在XSLT样式表中声明扩展函数的名称空间。...使用XSL转换向导Studio提供了一个执行XSLT转换的向导,当希望快速测试样式表或自定义XSLT扩展函数时,该向导非常有用。

4.3K20

使用自定义行为扩展 WCF

您可以通过编写能以声明方式应用到服务中的自定义行为来使用这些扩展点。本月将为您介绍这一流程的工作原理。...您可以使用这些扩展点来实现各种自定义行为,包括消息或参数验证、消息日志记录、消息转换、自定义序列化/反序列化格式、输出缓存、对象共用、错误处理和授权等。...图 2 代理(客户端)扩展  正如在第一步中看到的那样,在此过程中,您可以使用可用的第一个扩展点来执行自定义参数检查。还可以使用扩展点执行自定义验证、值修改或特殊过滤。...操作调用程序 作为最后一个示例,我们了解一下操作调用程序扩展点。您可以使用扩展点替代具有自定义调用程序对象的默认过程。在邮政编码示例中,可以使用操作调用程序来实现一个简单的输出缓存功能。...您的自定义调度程序/代理扩展可以使用这些集合存储(并查询)整个管道中用户定义的状态。 总结 WCF 提供了一个强大的扩展体系结构,可用于进行大量的运行时自定义

1.7K70
领券