使用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)