Android 创立第一个Kolin语言的我的项目

一:介绍
开发工具AS创立一个项目选择Language为Kolin语言

在Android Studio 3.0以上吧应该都已反对Kolin,我是基于Android studio 4.1开发的
能够在AS3.0以下,加载Kolin插件。

我应用的Kolin是1.3.72,创立实现后。
在我的项目下的build.gradle能够查看

在app下的build.gradle的依赖

plugins {    id 'com.android.application'    id 'kotlin-android'//利用kolin}dependencies {    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"    implementation 'androidx.core:core-ktx:1.2.0'//增加kolin外围库    implementation 'androidx.appcompat:appcompat:1.2.0'    implementation 'com.google.android.material:material:1.2.1'    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'    testImplementation 'junit:junit:4.+'    androidTestImplementation 'androidx.test.ext:junit:1.1.2'    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'}

对应的MainActivity

class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)                  val btn = findViewById<Button>(R.id.btn)//找到一个控件        val content = findViewById<TextView>(R.id.tv)        btn.setOnClickListener {//控件点击事件            content.setText("你哈")            Log.d("aa", "我被点击了")        }    }}//这里能够看出和咱们的Java的不一样

Kolin 提供了不须要查找id的形式
须要在app的build.gradle下增加
apply plugin: 'kotlin-android-extensions' 的插件

plugins {    id 'com.android.application'    id 'kotlin-android'    id 'kotlin-android-extensions'}

这样的话就间接不须要findViewById

//导包import kotlinx.android.synthetic.main.activity_main.* override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        btn.setOnClickListener {            tv.setText("你哈")            Log.d("aa", "我被点击了")        }    }

1.val:是一个只读变量,这种申明变量的形式相当于java中的final变量。一个val创立的时候必须初始化,因为当前不能被扭转(相当于一个常量)
var:是一个可变变量,这是一个能够通过重新分配来更改为另一值的变量,这种申明变量的办法和Java中申明的形式一样

2.Kolin 没有; java有;号
3.绝对于JAVA来说,Kolin在编写代码是有如下劣势:代码简洁高效,函数式编程,空指针平安,反对lambda表达式,流式API
4.Kolin中的:的位置大大晋升了
(1)定义变量类型

  var name:String="Rocky"//变量name为String类型  等价于Java的  String name="Rocky";

(2)定义参数的类型

fun makeTool(id:Int){//参数id为Int类型}

等价于Java的

public void makeTool(Int id){}

(3)定义函数的返回值

fun getAddr(id:Int):String{//返回值为String类型 }等价于Javapublic String getAddr(Int id){}

(4)申明类/接口的继承

创立一个Cat类open class Cat{  var skill="我会上树"  var dislike="我厌恶洗澡"}

这里的类前退出open关键字,它的作用是表明这个类是能够被继承的,如果不加,则表明这个类不能够被继承
class CatYellow:Cat(){
var name="我是猫黄上"
}
(5)接口
创立Studys接口:
interface Studys{
fun study()
fun sleep()
}
接口的实现
class CsdnGoddess : Cat(), Studys {

override fun study() {    println(name + "学习")}override fun sleep() {    println(name + "睡觉")}

}
(6)应用Java类
val intent=Intent(this,MainActivity::class.java)//须要用::来应用Java类,留神是两个

(7)没有“new”
var list=ArrayList()
等价于Java
List list=new ArrayList();
(8)空指针平安
空指针平安并不是不须要解决空指针,扭腰用“?”申明某个变量是容许空指针的
var num:Int?=null

val v1 =num?.toInt() //不做解决返回 nullval v2 =num?.toInt() ?:0 //判断为空时返回0val v3 =num!!.toInt() //抛出空指针异样(用“!!”示意不能为空)

(9)用is取代了 instance of ,通用in 示意区间和汇合
if(Obj is String)
if(x in 1..5)//查看x数值是否在1到5区间
if(name in list)//查看list中是否有某个元素(比Java简洁多了)
(10) 用when 取代了switch

fun doWhen(name:String){//String类型参数when(step){//能够解决多种类型1->"is Int"in 2..5->"between 2-5""str"->addChildName(name)//调用函数}}

END:学海无涯