Kotlin中国 为您找到相关结果 8

KotLin(1.1)学习笔记(2)——this关键字

这一块的内容在官网介绍中已经比较清楚了,这里基本是复数一遍加深印象。为了表示当前的 接收者 我们使用 this 表达式:在类的成员中,this 指的是该类的当前对象在扩展函数或者带接收者的函数字面值中, this 表示在点左侧传递的 接收者 参数。 如果 this 没有限定符,它指的是最内层的包含它的作用域。要引用其他作用域中的 this,请使用 标签限定符:限定的 this要访问来自外部作用域的this(一个类 或者扩展函数, 或者带标签的带接收者的函数字面值)我们使用this@label,其中 @label 是一个 代指 this 来源的标签: /** *限定词this的demo */ class TestThisA{ inner class TestThisB{ fun Int.foo...阅读全文

博文 2017-05-27 16:02:11 范式魂

Kotlin入门之extentions(2)

友元对象扩展 如果一个类中定义了一个友元对象(companion object),你就可以对这个友元对象进行函数和属性扩展。 class MyClass { companion object { } // will be called "Companion" } fun MyClass.Companion.foo() { // ... } 正如友元对象的常规函数一样,只能使用所在类的类名作为前缀进行调用: MyClass.foo() 扩展之作用域 很多情况下我们都在顶级包下进行扩展 package foo.bar fun Baz.goo() { ... } 如果需要在超出包的范围内进行使用的话,需要进行导入(import): package com.example.usage import ...阅读全文

博文 2017-05-27 15:28:05 I二师兄I

我的Kotlin 学习之路(二)Kotlin之扩展

为什么从关键字一下就跳到扩展了?我们知道JAVA中没有扩展的概念,Kotlin中引入了扩展,如果我能预测成功的话,这将成为对JAVA最大的挑战。。。1、什么叫扩展extension? 扩展其实就是自定义原始类的方法和属性2、为什么要扩展? 当原始类中现有的方法或属性已不能满足开发需要或者开发者需要更便利、更灵活的方法及属性时使用3、扩展的种类? 扩展分为扩展方法和扩展属性4、扩展的实现及调用? 扩展实际上相当于原始类的静态方法,调用简单下面codeing先定义一个C类,一个成员方法,一个属性class C(var size:Int = 0){ fun foo (){ println("成员方法") }}//C类扩展方法 //C类本没有f()这个方法,f()是开发者自定义的,是属于C类的静态方...阅读全文

博文 2017-06-02 12:02:22 活着工作室

Kotlin编码窍门之this表达式(This Expression)

为了表示当前接收者,我们使用this表达式: 在类的成员中,this指的是当前类的对象 在扩展函数或具有接收者的函数字面值,this指的是.操作符左侧的接收者参数 如果this没有修饰符,它归属于最内层封闭作用域。为了让this归属于其他作用域,可以使用标签修饰符: 被修饰的this(Qualified this) 为了在外部作用域(类,扩展函数,或被标签的带有接收者的字面函数)访问this,我们使用this@label,@label是一个代指this来源的标签: class A { // implicit label @A inner class B { // implicit label @B fun Int.foo() { // implicit label @foo val a = ...阅读全文

Kotlin混淆

问题 第一种 val funLit2 = { s: String -> val d1 = s println(d1) } 第二种 val funLit = fun String.() { val d = this println(d) } 结论 第一种情况: 匿名函数,即一个未声明的函数, 做为表达式传递如果我们把所有可选标注都留下,看起来如下: val funLit2:(String)->Unit ={ s: String -> val d = s print(d) } 非匿名函数写法: fun funLit2(s:String): Unit { val d = s print(d) } 省略Unit fun funLit2(s:String) { val d = s print(d) }...阅读全文

博文 2017-06-13 18:02:17 91b9ccc21580

Kotlin(1.1)学习笔记(10)——高阶函数和lambda表达式

终于到这一块了。对刚从我没有c++基础的人来说,这两部分是比较难懂的,下文参照的文档也比较多,这里只说出自己的理解,如果有误请客位看官指出。 高阶函数 将一个函数当做参数或者返回的函数成为高阶函数。 fun lock(body: ()->T): T{ val lock = Any() synchronized(lock){ return body() } } lock参数中body: ()->T表示这里需要一个参数,()->T说明body函数是无参函数,并且它返回了T类型。高阶函数的使用和普通函数是类似的: fun highFunc() = test() lock(::highFunc) 同时kotlin也支持lambda表达式实现高阶函数的调用,如下 lock({test()}) l...阅读全文

Kotlin面向对象之扩展(Extensions)

Kotlin与C#和Gosu类似,可以为一个类扩展一个新功能,但是不必继承该类或使用设计模式,如装饰器模式。Kotlin是通过被称为扩展的特殊声明完成这项工作的。Kotlin支持函数扩展和属性扩展。 函数扩展(Extension Functions) 为了声明一个扩展函数,我们需要以接收者类型作为该函数的前缀,也就是说:接收者类型就是被扩展的类型。如下示例了为MutableList增加了一个swap方法: fun MutableList.swap(index1: Int, index2: Int) { val tmp = this[index1] // 'this' corresponds to the list this[index1] = this[index2] t...阅读全文

博文 2017-05-27 15:19:09 樹學

我与 Kotlin 的爱恨情仇之浅谈 reified

Goal: support run-time access to types passed to functions, as if they were reified (currently limited to inline functions only). Sorry, 我并没有找到更多关于 reified 的相关文档信息啦,其中有两篇文档 《reified-type-parameters》 以及 《reference/inline-functions》, 您可以参考。 100% interoperable with Java™ and Android™ 这句话你可别真信了的!看完这篇文章你就知道了的。 reified 是什么? 这个单词,也是起的有点犀利,reified 翻译一下就是: ...阅读全文