Gradle 构建项目管理工具
Android经常使用build.gradle来添加依赖和批量打包。 Gradle 简单介绍Gradle 构建由 Project 和 Task 组成,Project 保存项目的属性,例如 name,版本号,代码文件位置。Task 也是 Project 的一部分,但是它是可执行的任务,我们最常使用的 build 就是一个 Task,Task 可以依赖于另外一个 Task,一个 Task 在执行的时候,它依赖的 Task 会先执行。这样,当我们 build 的时候,这个 Task 可能依赖很多的 Task,比如代码检查、注解处理,这样一层层的依赖,最终通过 build Task 全部执行。 gradle和groovy的区别Gradle是一种自动化构建工具,与之类似的还有Maven,Ant。而Groovy是一种语言,Gradle允许使用这种语言来编写。同样kotlin也是一种语言可以用来编写Gradle,这两种语言有不同的编写格式,但是都大差不差。 DSLDSL全称:Domain Specific...
数据类、密封类和枚举类
数据类在class前面加上data前缀,将会创建一个数据类。编译器会自动的从主构造函数中根据所有声明的属性提取以下函数: equals() / hashCode()toString() 格式如 “User(name=John, age=42)”componentN() functions 对应于属性,按声明顺序排列copy() 函数 copy函数示例: 12345678910data class User(val name: String, val age: Int)fun main(args: Array<String>) { val jack = User(name = "Jack", age = 1) val olderJack = jack.copy(age = 2) println(jack) println(olderJack)} 密封类密封类用来表示受限的类继承结构。每个枚举常量只存在一个实例,而密封类...
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...
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...
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) } ...
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() =...
数据类型、位操作、字符、数组、字符串
数据类型类型 -> 位宽度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类型 ...
可变长参数函数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...