android开发,从java走进Kotlin

本文详细介绍了如何在Android项目中将Java代码转换为Kotlin代码,包括使用Studio编译器进行转换的具体步骤,以及转换后代码常见问题的解决方法。同时,深入探讨了Kotlin语言特性,如变量声明、条件语句、函数定义和类构造等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用java编写Android代码,然后进行kotlin代码转化

1 在工程内点击需要转化代码的路径,然后在studio编译器上进行转化操作:Code->Convert java file to kotlin file。

    注意:要选中代码块,不然无法进行kotlin转化。

2 自动生成时,会添加implementation "androidx.core:core-ktx:+",将其修改成implementation "androidx.core:core-ktx:1.3.1"

修改成具体的版本

3 转化后代码上遇到的问题:

提示信息:Smart cast to 'TextureView!' is impossible, because 'mMainTextureView' is a mutable property that could have been changed by this time

代码位置:mMainTextureView.surfaceTextureListener = MySurfaceTextureListener()

修改方法:mMainTextureView?.surfaceTextureListener = MySurfaceTextureListener()

说明:在mMainTextureView后加入问号,如果mMainTextureView为空则不进行surfaceTextureListener的赋值。

     延伸:mMainTextureView初始化时后面加入?,标识变量可为空。

知识点

变量

    // 1.1.1 var标识可变变量
    private var kLearn111: Int = 5
    // 1.1.2 val标识不可变变量
    private val kLearn112 = "123"
    // 1.1.3 ?= 标识可空变量
    private var kLearn113: Int? = null
    /* 易错写法
    private var kLearn113? = null
    private var kLearn113?: Int = null
     */
    // 1.1.4 lateinit 后期初始化 必须是var
    private lateinit var kLearn114: String
    // 1.1.5 by lazy 延迟初始化 必须是val (延迟属性会在第一次访问时进行计算)
    private val kLearn115:String by lazy { "延迟初始化" }

    // 1.2.1 常量 伴生对象
    companion object {
        const val K_LEARN_121:String = "121"
    }
    // 1.2.2 常量 object修饰的类 使用时需要引包 com.example.**.**.kLearn122.K_LEAEN_122
    object kLearn122{
        const val K_LEAEN_122:Int = 9
    }

    // 1.3.1 数组 可以包含不同类型
    var kLearnAar131 = arrayOf(1, "2", true, 'a', 1.2f)
    // 1.3.2 数组 可空数组
    var kLearnAar132 = arrayOfNulls<Int>(5)


    public fun funKLearn1(){
        println("这是延迟初始化kLearn111:$kLearn111")
        kLearn111 = 6
        println("这是延迟初始化kLearn111:$kLearn111")

        // 报错
        //kLearn112 = "1234"
        println("这是延迟初始化kLearn111:$kLearn112")

        println("这是延迟初始化kLearn111:$kLearn113")
        kLearn113 = 0
        println("这是延迟初始化kLearn111:$kLearn113")

        println("这是延迟初始化kLearn111:$kLearn114")
        kLearn114 = "234"
        println("这是延迟初始化kLearn111:$kLearn114")

        println("这是延迟初始化kLearn115:$kLearn115")

        println("这是常量K_LEARN_121:$K_LEARN_121")
        println("这是常量K_LEAEN_122:$K_LEAEN_122")
    }

语句

// 2 语句
    // 2.1 if语句,最有一句是其返回值
    public fun funKLearn21(){
        val kLearn211: Int = 1
        val kLearn212 = if (kLearn211 > 0) "true" else "false"
        println("if语句的值是:$kLearn212")
    }
    // 2.2 for语句
    public fun funKLearn22(){
        for (index in 1 until 5){
            println("for语句221:$index")
        }
        for (index in 5 downTo  1){
            println("for语句222:$index")
        }
        for (index in 1 .. 5){
            println("for语句223:$index")
        }
        for (index in 1 until 5 step 2){
            println("for语句224:$index")
        }
        for (index in "ABCDE"){
            println("for语句225:$index")
        }

        val kLearnAar226 = arrayOf(1, 2, 3, 4, 5)
        for (index in kLearnAar226.indices){
            println("for语句226:$index")
        }
        for ((index, value) in kLearnAar226.withIndex()){
            println("for语句226:$index, $value")
        }
    }
    // 2.3 when语句 类似switch
    public fun funKLearn23(){
        var kLearn231 = 1
        when (kLearn231){
            1 -> println("when语句231:是1")
            2 -> println("when语句231:是2")
            else -> println("when语句231:是其他")
        }
        when (kLearn231){
            in 1..10 -> println("when语句231:在范围内")
            else -> println("when语句231:不在范围内")
        }

        val kLearnAar232 = arrayOf(1, "2", true)
        for (index in kLearnAar232) {
            when (index) {
                is Int -> println("when语句232:${index}是Int类型")
                is String -> println("when语句232:${index}是String类型")
                else -> println("when语句232:${index}是其他类型")
            }
        }
    }

函数

// 3 函数
    // 3.1 默认参数
    public fun funKLearn31(){
        funKLearn311("KLearn311")
        funKLearn311("KLearn311", 2)
        funKLearn311("KLearn311", 3, 3f)
        // 传参时加入参数名,增强可读性
        funKLearn311( "KLearn311", numI = 4)
        funKLearn311(str = "KLearn311", numI = 5, numF = 5f)
        // 更改位置
        funKLearn311(numF = 6F, numI = 6, str = "KLearn311")

        funKLearn312("KLearn312", 1, 2, 3, 4, 5)
        // 网上看是可以的,这里不好用 伸展操作符( * )
        // val kLearnAar312 = arrayOf(6, 7, 8, 9)
        // funKLearn312("KLearn312", *kLearnAar312)
    }
    private fun funKLearn311(str: String, numI: Int  = 1, numF: Float = 1f){
        println("函数funKLearn311参数 Str:${str}, numI:${numI}, numF:${numF}")
    }
    // vararg 可变参数
    private fun funKLearn312(str: String, vararg value: Int){
        println("函数funKLearn312参数 Str:${str}")
        for(index in value){
            print(" :${index}")
        }
    }
    // 单表达式函数
    private fun funKLearn313() = 1
    private fun funKLearn314(str: String) = "abc"
    private fun funKLearn315(num1: Int, num2: Int) = num1 + num2

fun main(args: Array<String>) {
    //1 构造函数
    var kLearnClass111: KLearnClass111 = KLearnClass111(1)

    // 1.2 主构函数初始化
    var kLearnClass121: KLearnClass121 = KLearnClass121(1)

    // 1.3 辅助构造函数
    var kLearnClass131: KLearnClass131 = KLearnClass131(1)
    var kLearnClass1311: KLearnClass131 = KLearnClass131(1, 2)
    var kLearnClass132: KLearnClass132 = KLearnClass132()
    var kLearnClass1321: KLearnClass132 = KLearnClass132(11, "22")
    var kLearnClass1322: KLearnClass132 = KLearnClass132(11)
    var kLearnClass1323: KLearnClass132 = KLearnClass132(true)

    // 2.1 继承
    var myKLearnClass21: MyKLearnClass21 = MyKLearnClass21()
    myKLearnClass21.funKLearn211()
    myKLearnClass21.funKLearn212()
    myKLearnClass21.funKLearn213()

    // 4.1 数据类
    var kLearnClass41: KLearnClass41 = KLearnClass41(2, "abc", true)
    // val 属性不可修改
    // kLearnClass41.num = 4
    // kLearnClass41.str = "xyz"
    kLearnClass41.boolean = false

}

// 1 构造函数 :主构函数和辅助构造函数

// 1.1 主构函数constructor (KLearnClass11等同于KLearnClass12)
class KLearnClass111 constructor(kNum: Int){}
class KLearnClass112(kNum: Int){}
// 1.2 主构函数初始化
class KLearnClass121 constructor(var kNum: Int){
    init {
        kNum = 1
        println("主构函数初始化")
    }
}
// 1.3 辅助构造函数constructor
class KLearnClass131 constructor(var kNum131: Int){
    init {
        kNum131 = 1
        println("主构函数初始化")
    }
    constructor(kNum132: Int, kNum133: Int) : this(kNum132) {
        println("辅助构造函数${this.kNum131}")
        println("辅助构造函数$kNum132")
        println("辅助构造函数$kNum133")
        println("辅助构造函数${kNum132 + kNum133}")
    }
}
// 1.3 辅助构造函数默认值
class KLearnClass132 constructor(kNum134: Int = 1 , kStr135: String = "2"){
    init {
        println("kNum134 = $kNum134 kStr135 = $kStr135")
    }
    constructor(kNum136: Boolean = false, kNum137: Int = 1 , kStr138: String = "2")
            : this(kNum137 , kStr138){
        println("kNum136 = $kNum136  kNum137 = $kNum137  kStr138 = $kStr138")
    }
}
// 2.1 继承
open class KLearnClass21() {
    open var kLearnNum = 1
    var kLearnStr: String = "abc"

    open fun funKLearn211(){
        println("继承:funKLearn211 kLearnNum=$kLearnNum")
    }
    open fun funKLearn212(){
        println("继承:funKLearn212 kLearnNum=$kLearnNum")
    }
    fun funKLearn213(){
        println("继承:funKLearn213")
    }
}
class MyKLearnClass21 : KLearnClass21(){
     override var kLearnNum = 2
//    报错:不能重写
//    override var kLearnStr: String = "abc"

    override fun funKLearn212(){
        println("继承者:funKLearn212 kLearnNum=$kLearnNum")
    }
//    报错:不能重写
//    override fun funKLearn213(){
//        println("继承者:funKLearn213")
//    }
}

// 3.1 接口

// 4.1 数据类 data (想想javabean)
data class KLearnClass41(val num: Int, val str: String, var boolean: Boolean)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值