:今天在知乎日报中的《Google I/O 完整盘点,这才是地球上最「性感」的发布会》中看到这么一句话
为了让开发者能够开发出更优秀的应用,Android 开始支持新的编程语言 Kotlin,开发人员的生产力能大幅度提升。
无奈,谷歌都说要支持了,看看Kotlin是个什么东西吧 - - - 不看不知道一看吓一跳,还真是个逆天的东西!
什么是Kotlin..
- Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发;
- Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行;
JetBrains,作为目前广受欢迎的Java IDE IntelliJ 的提供商,在 Apache 许可下已经开源其Kotlin
编程语言.
Kotlin有啥好处..简洁: 大量重复的模版代码不用写了,JavaBean不用写了,findViewById也不用写了..等等;
- 安全: 空指针等异常在语言层面被处理掉了,不用去写各种判空操作,有空会编译不通过;
- 函数式编程: 自带lambda,filter,map,reduce;
- 与 Java 完美结合: Kotlin 可以完美复用现有 Java 代码,不用去重写,反过来也适用.
怎么用..
语法
- 定义变量
var 变量名 : 变量类型 = 初值;
var 变量名 = 初值;
栗子
var variable : Int = 10086; - 定义常量
val 变量名 : 变量类型 = 初值;
栗子
val constant : Int = 10086; - 定义方法(注意 返回值类型前面有 “:”)
fun 方法名(参数名 : 参数类型,参数名:参数类型) : 返回值类型<没有不写>{
方法体;
}
栗子
fun method(count : Int,name : String) : String{
return name+count;
} - 重写方法
override fun 父类方法(父类参数) : 父类方法返回值{
方法体
}
栗子
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
} 方法扩展
Kotlin 可以在不修改原始类的情况下,给类增加新的功能(方法) 具体使用请见示例代码
fun 原类名.新方法名(参数)返回值{ 方法体 }List 赋初值
var list = arrayListOf<Int>(1,2,3,4,5); 泛型可加可不加List 不赋初值
var list = arrayListOf<Int>(); 泛型必须加List遍历
for(item in list){
Log.i(“RedWolf”,”“+item);
}Map的赋初值与不赋初值的用法和List一样
- Map 只读
var map = mapOf <Int,Int>(); Map 可读可写
var map = mutableMapOf<String,String>();Map遍历
for((k,v) in map){
Log.i(“RedWolf”, “$k->$v”);
}switch 被取消 被替换为When 具体使用请见实例代码
- 其余使用方法以及特性,咱们进去代码中使用
AndroidStudio中使用
- 然而AndroidStudio暂时还没有自带Kotlin,我们需要安装Plugin…
如图所示 安装重启.57.2M,要等几分钟.
重启之后 新建一个项目,并且打开我们MainActivity,我们可以Ctrl+Shift+A 搜索Convert 点击Convert Java File to Kotlin File 也可以直接Ctrl+Shift+Alt+K 进行转换,转换完毕如图所示
需要配置Gradle
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
...
ext.kotlin_version = '1.1.2-4'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
...
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
- sync之后,环境就配置好了,我就说一点,Bundle?的意思 是说savaInstanceState可以为null
好了 我们开始编码
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/mTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/mButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="逆天了" />
</LinearLayout>
onCreate中代码