31DaysOfKotlin-series 2

原创 2018年04月16日 13:40:41
  1. Kotlin可以有mutable和ready-only的field,同时它的getters和setters方法默认是自动生成的,你也可以自定义。

    class User {
           val id: String = "" //immutable. just getter
           var name: String = "" //default getter and setter
           var surName: String = "" //custom getter, default setter
               get() = surName.toUpperCase() //custom getter declaration
    
           var email: String = "" //default getter, customer setter
               set(value) {     // custom setter declaration
                   //"value" custom setter's parameter
                   //"field" = property's backing field;
                   if (isEmailValid()) field = value 
               }

    Properties and Fields: Getters, Setters, const, lateinit - Kotlin Programming Languagekotlinlang.org

  2. 使用data class当你想要保存一些数据的时候,它默认实现了equals,hashcode,toString以及copy

    data class User(val name: String, val email: String)
    
       class UserListDiffCallback {
           fun areContentsTheSame(oldPosition: Int, newPosition: Int): Boolean {
               // use the generated equals method
               return newList[oldPosition] == oldList[newPosition]
           }
       }

    Equality - Kotlin Programming Languagekotlinlang.org

  3. 在Kotlin里,默认的修饰符都是public,但它还是提供了一些其他的修饰符:private,protected,internal

    // public by default
    var isVisible = true
    
    // only in the same file
    private var isHidden = false
    
    internal val almostVisible = true
    
    class Foo {
       // public by default
       var isVisible = true
    
       // visible to my subclasses
       protected val isInheritable = true
    
       // only in the same class
       private val isHidden = true
    }

    Visibility Modifiers - Kotlin Programming Languagekotlinlang.org

  4. 如果过度重载导致函数的数量急剧增加,我们可以指定Kotlin中参数的default值,还可以通过在call函数时候,指定参数值,增加code的可读性

    // parameters with default values
    class BulletPointSpan(private val bulletRadius: Float = 1.2f,
                         private val gapWidth: Int = 5,
                         private val color: Int = 255)
    
    // using only default values
    val bulletPointSpan = BulletPointSpan()
    // passing a value to the first argument and using default values for the other two
    val bulletPointSpan2 = BulletPointSpan(1.6f)
    // using a named parameter for the last argument and default values for the other two
    val bulletPointSpan3 = BulletPointSpan(color = 0)

    Functions: infix, vararg, tailrec - Kotlin Programming Languagekotlinlang.org

  5. 密封类用来限制类的继承关系,这意味着密封类的子类数量是固定的。看起来就像是枚举那样,当你想在一个密封类的子类中寻找一个指定的类的时候,你可以事先知道所有的子类。不同之处在于枚举的实例是唯一的,而密封类可以有很多实例,它们可以有不同的状态。

    它和Enum class的区别:sealed class子类可以有multi instances,但是enum constant只有一个instance实例,如果需要constant behavior,选择enum,否则选择sealed;sealed类本身是抽象的,不能实例化,可以添加abstract member

    
    sealed class Intention {
       // 在kotlin1.1之前,必须放到Intention之中
       class Refresh: Intention()
       class LoadMore: Intention()
    }
    
    fun main(args: Array<String>) {
       val intention: Intention = Intention.LoadMore()
       // else statement is unnecessary when using sealed class
       val output = when (intention) {
           is Intention.Refresh -> "refresh"
           is Intention.LoadMore -> "loadMore"
       }
       println(output)
    }
    
    //另外一种方式定义
    sealed class NetworkResult
    data class Success(val result: String): NetworkResult()
    data class Failure(val error: String): NetworkResult()

    Sealed Classes - Kotlin Programming Languagekotlinlang.org

31DaysOfKotlin-series 3

Kotlin可以有mutable和ready-only的field,同时它的getters和setters方法默认是自动生成的,你也可以自定义。 class User { val i...
  • swust_chenpeng
  • swust_chenpeng
  • 2018-04-17 19:15:46
  • 3

31DaysOfKotlin-series 1

最近从网上看到Google推送的31天学习Kotlin,觉得还不错,所以特此Mark下处理null条件?可以使用elvis operator '?:' val name: String = perso...
  • chenpengchengdou
  • chenpengchengdou
  • 2018-04-15 19:20:03
  • 7

31DaysOfKotlin-series 4

Android的KTX实现了Kotlin中的reified type parameters,这样一来,就可以不用再传递class的参数给我们的函数,比如: // the old way var a...
  • swust_chenpeng
  • swust_chenpeng
  • 2018-04-18 20:02:52
  • 4

24点之2 2 2 2

24点之2 2 2 2常规运算没有答案!特殊运算如下:(2+2)!+2-2=4!=4*3*2*1=24 (2*2)!+2-2=4!(2^2)!+2-2=4!(2+2)!/(2/2)=4!(2*2)!/...
  • wwwllllove
  • wwwllllove
  • 2011-04-19 20:15:00
  • 660

数学问题:2 2 2 = 6……

2 2 2 = 6 3 3 3 = 6 4 4 4 = 6 5 5 5 = 6 6 6 6 = 6 7 ...
  • baidu_36359398
  • baidu_36359398
  • 2017-05-10 14:23:12
  • 213

argc!=2什么意思

argc!=2返回错误或退出,是为了限制参数个数为2,典型的应用
  • u013167809
  • u013167809
  • 2015-06-12 10:45:25
  • 759

"2>&1" 是什么意思

ls -l > out.file 2>&1 & 解释: ls -l > out.file //将ls的输出重定向到文件out.file 2>&1 //在shell中,文件描述符通常是:STDIN...
  • yaya1943
  • yaya1943
  • 2015-09-21 17:53:39
  • 3342

linux shell 中的 2>&1 用法说明

linux中有三种标准输入输出,分别是 STDIN,STDOUT,STDERR,对应的数字是 0,1,2。STDIN 是标准输入,默认从键盘读取信息; STDOUT 是标准输出,默认将输出结果输出至...
  • huangfei711
  • huangfei711
  • 2016-04-04 22:54:07
  • 3976

BASH中2>1 与2>&1的区别

在写BASH脚本时经常看到2>1 和2>&1的写法,经常分不清楚有什么区别.两种写法都可以工作,但差别还是很大的 2>1的作用是把标准错误的输出重定向到1,但这个1不是标准输出,而是一个文件...
  • ambercctv
  • ambercctv
  • 2016-09-08 19:18:50
  • 1801

Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C. Felicity is Coming!组合学+集合

题意:给出n组数,每组gi个数,每个数属于1~m,每个数可以变化但变化前相同的数变化后依然相同,变化前不同的速变化后依然不同,且可能不变,但经过变化后每组的每种数的个数不会变化,求变化的总方案数。 组...
  • ProLightsfxjh
  • ProLightsfxjh
  • 2017-01-14 01:28:50
  • 599
收藏助手
不良信息举报
您举报文章:31DaysOfKotlin-series 2
举报原因:
原因补充:

(最多只允许输入30个字)