第四章 kotlin其他基础知识1
文章目录
- 第四章 kotlin其他基础知识1
- 前言
- 一、filter知识点
- 二、when
- 三、lateinit 晚点创建
- 四、with
- 五、anko库的使用
- 六、懒加载初始化
- 七、companion object的使用
- 八、扩展函数的使用
- 总结
前言
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的一些其他基础知识。