美文网首页
kotlin函数特性语法

kotlin函数特性语法

作者: 走在冷风中吧 | 来源:发表于2018-07-16 16:54 被阅读12次
    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函数特性语法

          本文链接:https://www.haomeiwen.com/subject/qclbpftx.html