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类型
}
等价于Java
public 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() //不做处理返回 null
val v2 =num?.toInt() ?:0 //判断为空时返回0
val 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:学海无涯
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。