Kotlin编程之五(函数定义与调用)

来源:互联网 发布:58同城合肥找美工 编辑:程序博客网 时间:2024/05/22 06:30

1、 集合的实例化跟初步使用

val list = arrayListOf("my", "name", "is", "list")list.add("678")//. 集合添加println("${list[0] + "__" + list.javaClass + "__" + list.first() + "__" + list.last() + "__" + list.get(1)}")val set = setOf(4, 2, 9)println("${set.elementAt(1).toString() + "__"+ set.javaClass}")val map = hashMapOf(1 to "one", 2 to "two", 3 to "three")println("${map[1] + "__" + map.javaClass}")//. 根据key取value值
2、集合简单实现输出'(xx, gg, uu)'

函数:

/** * 输出 (xx; gg; uu) * @param collection:泛型集合 * @param separator:分隔符 * @param prefix:前缀 * @param postfix:后缀 * */fun <T> joinToString (collection: Collection<T>, separator: String, prefix: String, postfix: String): String {    //. 使用StringBuilder类拼接字符串,先拼接前缀括号    val result = StringBuilder(prefix)    for ((index, element) in collection.withIndex()) {        //. 第一位文本无需用分隔符隔开        if (index > 0) result.append(separator)        //. 在第一位文本后开始拼接分隔符        result.append(element)    }    //. 循环遍历完后拼接后缀括号    result.append(postfix)    return result.toString()}

调用:

val list = arrayListOf("xx", "gg", "uu")println(joinToString(list, ";", "(", ")"))
3、设置默认参数值,对于上面不是>=AS 3.0版本的,可能输入参数时会很混乱。当然可以声明全局的字符串变量:separator、prefix、postfix,但对于Kotlin有更加简便的方式,那就是对参数初始化(-->真是神奇啊),更是神奇的是参数可省略,具体代码如下

修改部分

fun <T> joinToString (collection: Collection<T>, separator: String = ";", prefix: String = "(", postfix: String = ")"): String {
调用:

val list = arrayListOf("xx", "gg", "uu")println(joinToString(list))println(joinToString(list, ";"))
4、

//. 如果不是常规的方法参数,就是初始化了的参数,那么可以这样再次赋值,代码可读性是不是更棒,nice\nice\niceprintln(joinToString(list, ";", prefix = "[", postfix = "]"))

5、在java类中调用Kotlin函数:

(1)新建Join.kt文件

package com.gm.kotlindemoclass JoinKt {}//. 写在类的外面-->即顶层fun <T> joinToString(collection: Collection<T>, separator: String = ";", prefix: String = "(", postfix: String = ")"): String {    //. 使用StringBuilder类拼接字符串,先拼接前缀括号    val result = StringBuilder(prefix)    for ((index, element) in collection.withIndex()) {        //. 第一位文本无需用分隔符隔开        if (index > 0) result.append(separator)        //. 在第一位文本后开始拼接分隔符        result.append(element)    }    //. 循环遍历完后拼接后缀括号    result.append(postfix)    return result.toString()}
(2)调用

List<String> strList = new ArrayList<>();strList.add("rr");strList.add("hh");strList.add("pp");Log.d(TAG, JoinKt.joinToString(strList, ";", "(", ")"));
(3)输出:

D/日志: (rr;hh;pp)

(4)我们可以重新用不同类名调用

a、在Jion.kt包前面添加@file:JvmName("StringFunctions"):

@file:JvmName("StringFunctions")
b、然后在java类中调用如下:

Log.d(TAG, StringFunctions.joinToString(strList, ";", "(", ")"));

6、顶层变量(只读变量、可变变量)两个知识点同时应用

(1)同样在Join.k类的顶层添加

//. 相当于java中的private static final String KT_LOG = "Kotlin日志";,同时val修饰的只有getterconst val KT_LOG = "Kotlin日志"//. 暴露给java的是一对getter跟settervar opCount = 0
(2)在java类中调用

StringFunctions.setOpCount(12);Log.d(StringFunctions.KT_LOG, StringFunctions.getOpCount()+"");
(3)输出

D/Kotlin日志: 12

7、导入包

(1)继承Kotlin的类下导入具体函数并重命名引用

//. 导入包具体函数并重命名引用import com.gm.kotlindemo.lastChar as last
(2)调用

Log.d(TAG, "pig".last().toString())
8、扩展函数__封装_例子

(1)对比之前的函数

/** * <T>用来声明泛型 * 扩展函数__封装 * */fun <T> Collection<T>.toMyString(        separator: String = ";",        prefix: String = "(",        postfix: String = ")"): String {    val result = StringBuilder(prefix)    //. 不同之处在于之前是参入集合参数,现在是集合参数作为触发条件,调用toMyString,这里用this代替    for ((index, element) in this.withIndex()) {        if (index > 0) result.append(separator)        result.append(element)    }    result.append(postfix)    return result.toString()}
(2)调用

val list = listOf(1, 2, 3)Log.d(TAG, list.toMyString(separator = "_" , prefix = "[", postfix = "]"))
9、指定类型调用封装函数

fun Collection<String>.join(        separator: String = "、",        prefix: String = "[",        postfix: String = "]") = toMyString(separator, prefix, postfix)
调用

Log.d(TAG, list.join())



阅读全文
0 0
原创粉丝点击