kotlin配置
//项目build.gradle
buildscript {
ext.kotlin_version = '1.1.51'//自主选择版本
repositories {
...
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
//AS有新版本会自动在这里提示
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_vers
}
}
//module中
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
kotlin特点
特点1:不用findview,直接用,非常爽
不夸张的说,极大提高开发效率,就算是butterknife+配合Android ButterKnife Zelezny插件也需要几个步骤.个人觉得butterknife已经是被淘汰的库了
import kotlinx.android.synthetic.main.activity_try_kotlin.*
class TryKotlinActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_try_kotlin)
//直接用view的id
test_tv.text = "test"
}
}
<!--activity_try_kotlin.xml-->
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/test_tv"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
特点2:点击事件代码精简:去你的匿名类
button.setOnClickListener { button.text="点击事件处理" }
特点3:没有烦人的";"
代码结尾不需要加上";"之前java代码中总是需要按一下补全代码快捷键,神烦~
特点4:极大消灭了空指针
因为kotlin编译时就会判空,只要自己不作死,基本上跟空指针说拜拜了
以字符串为例
//java字符串判空
if (str!=null && str.length()>0 && str.trim().length()>0) {
......
}
var length:Int = 0
val strA:String = "非空字符串"
length=strA.length //不用判空,这样写没有毛病
val strB:String? = null
//length=strB.length 编译不会通过,因为strB可能为空,会扔出空指针异常
length = if (strB!=null) strB.length else -1
//语法糖 ?. ?:
var length_null:Int?
//?.表示对象为空时就直接返回null,所以返回值的变量必须被声明为可空类型
length_null = strB?.length //strB?.length 等价于 if (strB!=null) strB.length else null
//?:表示为空时就返回右边的值,即(x!=null)?x.**:y 相当于三目运算符
length = strB?.length?: -1
//如果百分百保证strB非空 运算符“!!”强行放弃了非空判断 通知编译器不做非空校验,运行时一旦发现实例为空就扔出异常
length = strB!!.length
val strC:String? = "可空字符串"
//即使strC实际有值,也必须做非空判断,谁叫它号称可空呢?编译器宁可错杀一千、不可放过一个
length = if (strC!=null) strC.length else -1
特点5:转换现有java代码,无缝切换到kotlin
一键转化kotlin其他
基本数据类型声明以及转换
//java
Int i=0;
//kotlin 其他数据类型声明,以此类推
val origin:Float = 65.0f
//类型转换
var int:Int = origin.toInt();
//判断是否为空
var isNull:Boolean = origin.isNaN();
声明与操作数组
//java
String[] string_array = new String[] {"zero", "one", "two"};
//kotlin
//基本变量类型数组
var long_array:LongArray = longArrayOf(1, 2, 3)
//对象类型数组
var string_array:Array<String> = arrayOf("zero", "one", "two")
//获取数组长度
var size:Int = string_array.size
//获取数组元素
var str:String = string_array[0]
网友评论