//泛型函数,和默认参数
fun <T> joinToString(
collection: Collection<T>,
separator: String = ", ",
prefix: String = "[",
postfix: String = "]"
): String{
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()
}
fun main(args: Array<String>){
//集合,HashSet
val set = setOf(1,2,3,4,4,5)
//列表,ArrayList
val list = listOf(1,2,3,4,4,5)
//Map,HashMap
val map = mapOf(1 to "one", 2 to "two", 10 to "ten")
//命名参数
val result = joinToString(set, separator = ", ", prefix = "{", postfix = "}")
}
const关键字
//Javapublicstaticfinal String PI = "3.1415";
//Kotlinconst val PI = "3.1415"
扩展类的功能
/* 文件1 */
//加一个方法
//这里的this指向调用该函数的String对象,可以省略
fun String.lastChar(): Char = this.get(this.length - 1)
fun String.lastChar2(): Char = get(length - 1)
//等价于StringUtil.lastChar("aaaa")
//加一个属性
var StringBuilder.lastChar: Char
get() = get(length - 1)
set(value) = setCharAt(length - 1,value)
/* 文件2,在同一包下 */
//导入到该文件,并重命名
import lastChar as l
fun main(vararg args: String){
println("lalalalala".l())
}
//扩展方法不会被覆盖openclass View{
openfun click() = println("View Clicked")
}
class Button : View(){
overridefun click() {
println("Button Clicked")
}
}
fun View.showOff() = println("I'm a View")
fun Button.showOff() = println("I'm a Button")
fun main(vararg args: String){
val view: View = Button()
view.click() //Button Clicked
view.showOff() //I'm a View(方法不会被覆盖)
}
可变参数
fun <T> addEle(vararg eles: T){
//*表示解构
val l = listOf<T>(*eles)
println(l)
}
//等价于fun <T> addEle(eles: Array<T>)
fun main(vararg args: String){
addEle(1,2,3,4)
}
中缀调用
val map = mapOf(1to"one",
7to"seven",
53to"fifty-three")
这是个语法糖, 对于单参数的函数
1.to("one")
1 to "one"
//写个玩玩看
classTest{
infix fun printPara(s: String){
println(s)
}
}
fun main(varargargs: String){
val test = Test()
test printPara "aaa"
}
//to这东西的由来
infix fun Any.to(other: Any) = Pair(this, other)
Pair解构
fun main(vararg args: String){
//只能在局部作用域中生效val (key, value) = 1to"one"
}
class User(val id: Int, val name: String, val address: String)
fun saveUser(user: User) {
//内部函数,能够访问外部函数的作用域
fun validate(value: String, fieldName: String)
{ if (value.isEmpty()) {
throw IllegalArgumentException(
"Can't save user ${user.id}: " +
"$fieldName is empty")
}
}
validate(user.name, "Name")
validate(user.address, "Address")
// Save user to the database
}