文章目录
- 一、使用Kotlin来简化findViewById代码
- 二、Kotlin特性
- 1.不需要“;”结尾
- 2.“:”的使用
- 3.没有“new”关键字
- 4.变量,常量定义,类型推断
- 5.空指针安全
- 6.函数定义
- 7.类检测及自动转换
- 8.in、区间和集合
- 9.用when取代了switch
- 10.单例模式
- 11.类的结构
- 12.构造函数
- 13.模块初始化
- 三、总结
一、使用Kotlin来简化findViewById代码
在Android的代码中,一个Activity和xml布局是一个引用关系,Activity中使用界面中的元素必须先用findViewById找到这个元素
在Kotlin中也可以继续通过findViewById来绑定界面控件,同时还可以通过在gradule中引用applyplugin:'kotlin-android-extensions’来跳过findViewById这个函数直接使用控件,实现步骤如下:
在app的gradule中,添加引用
通过布局中的控件id直接使用,这里给TextView赋值为例:
通过按住Ctrl+鼠标焦点,可以看到这个控件id属于哪个xml布局,并可点击跳转。
Kotlin通过遍历xml创建临时的虚拟包来实现引用,在编译APK时,会自动补充findViewById代码,最终生成的内容是一样的,但可以减少开发时findViewById的代码量。
二、Kotlin特性
1.不需要“;”结尾
在Kotlin语法里,代码行不需要用“;”结尾,代码结束不需要符号
2.“:”的使用
在Java里,“:”主要在运算符里出现(for/switch/三元运算符等)。
在Kotlin语法里“:”的作用比较广泛
(一) 定义变量类型
var name:String="my name"
(二) 定义参数类型
fun setID(id:Int){
}
(三) 定义函数的返回值
fun getAddr(id:Int):String{
}
(四) 声明类/接口的继承
class KotlinActivityUI :AnkoComponent<KotlinActivity>{
}
(五) 使用Java类
startActivity(Intent(this,KotlinActivity::class.java))
3.没有“new”关键字
Kotlin实例化一个对象时不需要new关键字
var list: List<String> = ArrayList()
val cat = cat()
4.变量,常量定义,类型推断
用var定义变量
var name:String="my name"
用val定义常量
val TAG:String="ClassName"
定义可省略数据类型,Kotlin会自动推断数据类型
var name="my name"
val TAG="ClassName"
5.空指针安全
空指针安全并不是不需要处理空指针,在Kotlin里,可以用“?”表示可以为空,也可以用“!!”表示不可以为空。
var num:Int?=null
空指针的处理情况,不处理,数据检查,抛出异常:
val v1 = num?.toInt()
val v2 = num?.toInt() ?:0
val v3 = num!!.toInt()
6.函数定义
函数定义使用关键字 fun,参数格式为:参数 : 类型
fun sum(a: Int, b: Int): Int {
return a + b
}
表达式作为函数体,返回类型自动推断,用“=”代替return:
public fun sum(a: Int, b: Int): Int = a + b // public 方法则必须明确写出返回类型
无返回值可以写Unit 或者不写,相当于java的void
fun printSum(a: Int, b: Int): Unit {
print(a + b)
}
public fun printSum(a: Int, b: Int) {
print(a + b)
}
函数的允许空指针安全
fun getAddress(id:Int,name:String) :String?="got it"
7.类检测及自动转换
使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。
fun getStringLength(obj: Any): Int? {
if (obj is String) {
return obj.length
}
fun getStringLength(obj: Any): Int? {
if (obj is String && obj.length > 0)
return obj.length
return null
}
8.in、区间和集合
区间是为任何可比较类型定义的,用in判断数字是否在某个区间
if(x in 1..5){ ...
用in判断集合中是否存在某个元素
if(name in list){...
用in遍历整个集合
for (i in 1..4) print(i)
for (i in 4..1) print(i)
if (i in 1..10) {
println(i)
}
for (i in 1..4 step 2) print(i)
for (i in 4 downTo 1 step 2) print(i)
for (i in 1 until 10) {
println(i)
}
在遍历集合时,可以从第N项开始遍历
for(i in 3..list.size-2){...相当于for (int i = 3; i <= list.size()-2; i++)
倒序遍历
for(i in list.size downTo 0) {...相当于for (int i = list.size(); i >= 0; i--)
9.用when取代了switch
fun doWhen(obj:Any){
when(obj){
1 -> "is Int"
in 1..5 -> "between 1-5"
"str" -> test(obj.toString())
is dog -> "is a dog object"
else -> "default"
}
}
代码中的参数类型Any,相当于Java中的Obejct,是Kotlin中所有类的基类
10.单例模式
在Kotlin中,直接从语言提供了单例,关键字为object,如果在androidstudio等IDE中支持了Kotlin,直接输入singleton会自动生成单例的伴随对象:
object SingTest {
val name = "Daipi"
}
11.类的结构
java中Object是所有类的基类,而在Kotlin中Any是所有类的基类
Kotlin中object(小写)代表单例类
Kotlin中没有new关键字
private: 仍然表示私有
protected: 类似private,在子类中也可见
internal: 模块内可见
inner:内部类
public: 仍然表示共有,但是Kotlin的内部类和参数默认为public,一般可以不写
abstract:仍然表示抽象类
interface:仍然表示接口
final关键字取消, Kotlin中的类默认不能继承,通过open关键字修饰后才可继承
static关键字取消,用compaion object的概念替换使用,伴随对象作为单例的实体,能继承扩展,比static更加灵活
java中使用implement和extend来实现接口和继承类,在Kotlin中统一使用“:”,继承类时后面需要**(),中间用“,**”区分
class BaseClass : Activity(), IBinder{
12.构造函数
java中构造函数一般通过下面的方式并列重载
public className (参数) {...}
public className (参数1,参数2) {...}
在kotlin中,类也可以有多个构造函数,分为一个主构造函数和多个二级构造函数,主构造函数一般直接写在类名后面
class dog (srt:String){...}
二级构造函数必须代理主构造函数
class dog (val name:String){
constructor(name: String,qq: Int):this(name){
}
}
13.模块初始化
类初始化时会执行init修饰的**{}**里面的代码
class dog (val name:String){
constructor(name: String,qq: Int):this(name){
}
init {
var qq = 123456
var myname = name
}
}
三、总结
以上是一部分kotlin语言的基础特性,更多详细的基础内容可仔细阅读官方文档
或在Kotlin教程中学习
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)