kotlin函数特性语法

  1. 函数的默认值能力
fun printName(name: String = "bob"): String{
    return name
}
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
      
        printName()
        printName("kevin")
    }

图上会分别输出 :
bob
kevin
因为在定义方法的时候, 已经给定默认值, 所以在调用方法的时候, 参数可以为空, 如果为空, 则取默认值


  1. 函数只有一个语句 , 可以将这个语句直接赋值给这个函数
fun printName(name:String) = println("message is $name")
  1. 函数嵌套(由于递归或者不希望外部函数访问)

  1. 扩展函数
    给一些类新增些自己需要的方法, 这个类的对象可以直接调用我们定义的扩展方法
//通过id的Int直接获取到对应的字符串str
fun Int?.getStr(): String = this?.let { BaseApplication.getInstance().getString(this) } ?: ""

  1. lambda函数表达式
    我们来对比下java8的lambda,如下:
    Thread thread2 = new Thread(() -> {});
    使用kotlin的lambda,如下:
    val thread = Thread({println("thread") })
    因为thread只有一个参数, 且这个参数是lambda,可以省略(), 如下:
    val thread = Thread{ println("thread")}

总结:
5.1 kotlin的lamdba的参数是写在花括号内的, 而java8的则需要写在括号里
5.2 kotlin当类只有一个参数, 且参数是lambda表达式,可以省略()
注意: 每个landba表达式都是一个匿名内部对象


  1. lambda闭包声明
    kotlin中可以对一个常量使用lambda闭包进行声明
//testprint是一个lamdba闭包对象
val testprint = {name:String->
   println(name)
}

//调用
testprint("bob")
  1. 高阶函数 (可以使用inline修饰,减少匿名对象的创建,编译的时候会直接转换成语句行 )
    定义: 函数的参数又是一个函数,或者lambda的参数又是一个lambda表达式, 这样的函数就叫高阶函数
  2. 伴生对象
    kotlin中没有静态方法, 想要实现像java中一样的静态方法需要使用伴生对象(companion object)
class FileUtil {
//在伴生对象中声明了一个静态方法
    companion object {
        fun checkFileName(name: String): String {
            return name
        }
    }
}

//在kotlin中调用该方法, 类名.方法
fun main(){
    FileUtil.checkFileName("aa")
}

//在java中调用kotlin中定义的方法, 类名.Companion.方法
public class TestFile {
    public void test(){
        FileUtil.Companion.checkFileName("aa");
    }
}

伴生对象的作用, 可以使用伴生对象创建单例:

//将构造方法私有化
class CarFactory private constructor(){

    companion object {
        //通过伴生对象的方法创造一个内部类
        fun getSingleton():CarFactory{
            return Holder.instance
        }
    }

    private object Holder{
        var instance = CarFactory()
    }
}

fun getCar(){
//直接获得单例对象
    CarFactory.getSingleton()
}

你可能感兴趣的:(kotlin函数特性语法)