第四章 kotlin其他基础知识1

第四章 kotlin其他基础知识1


文章目录


前言

kotlin其他基础知识1。


一、filter知识点

1.filter、forEach、@blockTag

代码如下:

fun main(args:Array<String>){
    println("测试结果:"+test())
}

fun test(): Boolean {
    var views = listOf("测试1","测试2","Test",10,true,true)

    println("测试列表索引:")
    for((i,e) in views.withIndex()){
        println("$i  $e")
    }

    views.filter { it is String }.forEach { move ->
        views.filter { it is Boolean }.forEach blockTag@{ block ->
            println("move = "+move+"  block = "+block)
            move as String
            block as Boolean
            val direction:String = block.toString() + "Test".equals(move)
            direction?.let {
                println("return@blockTag")
                return@blockTag //此处的return@blockTag功能类似于java的continue(),但又有区别。它是停止下面代码的执行,并直接到上面的blockTag@标志处,继续下次迭代循环。
            }
        }
    }

    return false
}


fun test2(): Boolean {
    var views = listOf("测试1","测试2","Test",10,true,true)

    println("测试列表索引:")
    for((i,e) in views.withIndex()){
        println("$i  $e")
    }

    views.filter { it is String }.forEach blockTag@{ move ->
        views.filter { it is Boolean }.forEach { block ->
            println("move = "+move+"  block = "+block)
            move as String
            block as Boolean
            val direction:String = block.toString() + "Test".equals(move)
            direction?.let {
                println("return@blockTag")
                return@blockTag //此处的return@blockTag功能类似于java的continue(),但又有区别。它是停止下面代码的执行,并直接到上面的blockTag@标志处,继续下次迭代循环。
            }
        }
    }

    return false
}

二、when

1.when的两种用法

代码如下:

fun main(agrs:Array<String>) {
    var x = 10

    val result:Boolean = when {
        x <= -10 -> false
        x >= 1000 -> false
        else -> x>-10 && x<1000
    }
    println("结果:${result}")
}
	var y = 10
    val result2:Boolean = when (y) {
        -10 -> true
        10 -> true
        else -> false
    }
    println("结果result2 :${result2}")

三、lateinit 晚点创建

1.lateinit 晚点创建

代码如下:

class otherTest {
    private val views = arrayListOf<View>() //普通非线程安全的集合
    private val views2 = CopyOnWriteArrayList<View>() //线程安全的集合

    private lateinit var test: Test  //lateinit 晚点创建
}

class Test {
    var x:Int = 0
}

四、with

1.with的用法

代码如下:

fun testWith() {
        val str = "hello"
        val array = str.toCharArray()
        val stringBuilder = StringBuilder()
        
        val result = with(stringBuilder){
            for (ch in array){
                val result = ch.toInt()
                append(result.toString()+" ")
                //println(result)
            }
            //返回结果
            toString()
        }

        println(result)
    }

    fun testWith2() {
        val str = "hello"
        val array = str.toCharArray()

        val result = with(StringBuilder()){
            for (ch in array){
                val result = ch.toInt()
                append(result.toString()+" ")
                //println(result)
            }
            //返回结果
            toString()
        }

        println(result)
    }

五、anko库的使用

1.anko库的使用

代码如下:

implementation 'org.jetbrains.anko:anko:0.10.8'
	var button = findViewById<Button>(R.id.button)
    button.onClick {
         mDialog.setTitle("对话框")
         mDialog.show()

         doAsync {//子线程
             Thread.sleep(2000)

             runOnUiThread{
                 mDialog.dismiss()
             }
         }
     }

六、懒加载初始化

1.懒加载初始化

代码如下:

class MainActivity : AppCompatActivity() {
    val button2:Button by lazy {//懒加载初始化View
        findViewById<Button>(R.id.button2)
    }

    //懒加载初始化
    private val mDialog:ProgressDialog by lazy {
        ProgressDialog(this)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var button = findViewById<Button>(R.id.button)
        button.onClick {
            mDialog.setTitle("对话框")
            mDialog.show()

            doAsync {//子线程
                Thread.sleep(2000)

                runOnUiThread{
                    mDialog.dismiss()
                }
            }
        }

        button2.onClick {
            alert("message", "title") {
                positiveButton("ok" ) {
                }
                negativeButton("cancel") {
                }
            }.show()
        }
    }
}

七、companion object的使用

1.companion object的使用

代码如下:

/**
 * 管理fragment的util类
 */
class FragmentUtil private constructor(){//私有化构造方法
    /**
     * companion object 在类中只能存在一个,类似于java中的静态成员、静态方法, Java 中使用类访问静态成员,静态方法。
     */
    companion object {//静态成员、静态方法
        val fragmentUtil by lazy { FragmentUtil() }
    }

    lateinit var str:String
}

//说明:仅object 修饰的类是单例类
    button2.onClick {
        FragmentUtil.fragmentUtil.str = "test"
    }

八、扩展函数的使用

1.扩展函数的使用

示例代码如下:

class MainActivity : AppCompatActivity() {
	override fun onCreate(savedInstanceState: Bundle?) {
	        super.onCreate(savedInstanceState)
	        setContentView(R.layout.activity_main)
	}
	
	/**
     * 扩展函数的使用
     * 把转化功能添加到Int类中作为扩展函数
     */
    fun Int.dp2px(): Int {
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,toFloat(),resources.displayMetrics).toInt()
    }
}
	var x:Int = 100
	var y:Int
	y = x.dp2px()  //调用扩展函数

总结

以上就是今天要讲的内容,本文仅仅简单介绍了kotlin的一些其他基础知识。

上一篇:pygame游戏实例入门


下一篇:SGU109 Magic of David Copperfield II