Kotlin扩展:新增方法,修改属性
kotlin扩展扩展函数,它可以在已有类中添加新方法,而不对原类做出修改。
123fun receiverType.functionName(params){ body}
例如:
12345678910111213class User(var name:String)- receiverType:表示函数的接收者,也就是函数扩展的对象- functionName:扩展函数的名称- params:扩展函数的参数,可以为NULL/**扩展函数**/fun User.Print(){ print("用户名 $name")}fun main(arg:Array<String>){ var user = User("Runoob") user.Print()}
扩展函数是静态解析的。12345678910111213141516171819202122232425262728293031package top.zfxtopen class a{ ...
Kotlin 继承与重写
继承kotlin中所有的类都继承自Any类,他是所有类的超类。Any 默认提供了三个函数:
12345equals()hashCode()toString()
在kotlin中,父类被定义为基类。如果子类有主构造函数,那么子类在主构造函数时,就要初始化父类的属性。如果子类是使用次构造函数,那么通过super标签继承父类的构造函数,可以是父类的主构造函数,也可以是次构造函数。
12345678class Student : Person { constructor(ctx: Context) : super(ctx) { } constructor(ctx: Context, attrs: AttributeSet) : super(ctx,attrs) { }}
重写在基类中,使用fun声明函数时,此函数默认为final修饰,不能被子类重写。如果允许子类重写该函数,那么就要手动添加 open 修饰它, 子类重写方法使用 override 关键词:可以用var重写一个val的属性,但是不能用val重写一 ...
Kotlin中的抽象、内部类、接口及修饰符
抽象类用abstarct来声明一个类为抽象类。嵌套类即为类内部的内部类。用inner来比奥是要给内部类。内部类有个对外部的对象的引用,所以内部类可以访问成员属性和成员函数。
123456789101112class Outer { private val bar: Int = 1 var v = "成员属性" /**嵌套内部类**/ inner class Inner { fun foo() = bar // 访问外部类成员 fun innerTest() { var o = this@Outer //获取外部类的成员变量 println("内部类可以引用外部类的成员,例如:" + o.v) } }}
inner类属于私有类,私有类不允许在主构造器中使用lateinit属性。
接口接口的属性需要自己定义get,set方法,他不会帮你定义。接口中的成员变量默认为open的, ...
Kotlin 类与对象概要
类与对象用class声明可以像普通函数一样使用构造函数创建类。
1val site = Runoob() // Kotlin 中没有 new 关键字
要使用类中的属性直接用.来引用即可。
主构造器,直接作为类头部的一部分,位于类名后。1class Person constructor(firstName: String) {}
如果没有特别的注解可以省略contstructor的关键字。如果构造器有注解,或者有可见度修饰符,这时constructor关键字是必须的,注解和修饰符要放在它之前。
getter和setter默认会实现getter方法和setter方法,val不会有setter方法。field指的就是存储在属性中的值。field 关键词只能用于属性的访问器示例:
1234567891011121314151617181920212223242526272829303132333435class Person { var lastName: String = "zhang" get() = field.toU ...
数据类型、位操作、字符、数组、字符串
数据类型类型 -> 位宽度Double -> 64Float -> 32Long -> 64Int -> 32Short -> 16Byte -> 8
kotlin不支持8进制有10进制:2进制:0b开头16进制:0x开头且他的数据类型不会自动由精度低的向高精度的自动转型。必须严格限制类型。
位操作符对于Int和Long类型,还有一系列的位操作符可以使用,分别是:
1234567shl(bits) – 左移位 (Java’s <<)shr(bits) – 右移位 (Java’s >>)ushr(bits) – 无符号右移位 (Java’s >>>)and(bits) – 与or(bits) – 或xor(bits) – 异或inv() – 反向
字符kotlin中的字符不能直接和数字比较,也就是不能直接转化为ASCII码。除非显式转化为Int类型
12'c'.toInt()//已废除'c' ...
可变长参数函数vararg
函数fun函数也可以用public来修饰
可变长参数函数vararg1234567891011fun main() { println("hello,world") print(sum(1,4,23,4,23,52))}public fun sum( a:Int,vararg b:Int):Int{ var result = a for (bn in b){ result += bn } return result}
vararg既可以一个一个的传入参数,也可以将一个定义好的数组当作参数传入,可以用*前缀来引用该数组
国内镜像源配置:Maven,Gradle,Kotlin
配置国内镜像源maven全局配置:在Maven的安装目录下的conf/settings.xml添加mirror源
123456789101112131415161718<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- 添加以下这段 Mirror 配置 --> <mirrors> <!-- Aliyun --& ...
Vue 插槽:复用组件的定制内容
默认插槽slot一般出现情况,当你要复用一个组件时,但是这个组件中你复用的只有他的框架,他的所有内容你都需要根据具体内容再次修改。而如果你在组件中添加v-show来实现上述要求时,会让结构变得非常混乱,无法正常阅读源码。因此最好的方法是每个组件再单独提供一些html结构和样式。所以vue提供了一个方法,插槽:在组件中需要使用当你没有向我传递值时,我会展示到页面上来表示哪里需要插入新的结构。然后在引用该组件的地方写好插槽的内容。例如:Student是组件,在app中
12345<div id="app"> <Student> <img src=""> </Student> </div>
这样子,在Student的slot标签处,就会被插入img标签
具名插槽可以给每个插槽命名,通过不同的插槽,插入到不同的位置。
12<slot name="center">我是命名为center的插槽</slot><slot n ...
嵌套、属性、乘法、编号、文本操作符
嵌套操作符
引用自知乎> (子元素)div>ul>li表现为:
12345<div> <ul> <li></li> </ul></div>
+ (兄弟元素)div+p+bq表现为:
123<div></div><p></p><blockquote></blockquote>
^ 返回上层
使用 ^ 运算符,您可以爬上树的一个层次,并更改上下文div+div>p>span+em^bq表现为:123456<div></div><div> <p><span></span><em></em></p> <blockquote></blockquote></div>// 此时的上下文返回到两个div所在的这一层了
当然了,^ 也可以多个并用,有 ...
对象属性合并
合并对象this.info = {…this.info,…dataObj)它会将this.info和dataObj的所有属性合并,如果有重复的,优先取后边dataObj的。最后整合后提交给this.info