• 夜班同志
    2022-01-19
    应该说明下 密封类是子类固定,枚举是对象固定 吧

    作者回复: 很好的补充,感谢建议,记下了。

    共 2 条评论
    21
  • 夜月
    2022-01-01
    接口的属性: 1.不能设置初始值 2.val可以重写get,var的get和set都不能重写

    作者回复: 赞!

    共 3 条评论
    10
  • 白乾涛
    2022-01-14
    Kotlin 的继承是默认封闭的,这样岂不是要经常修改基础类吗?特别是对于那些开源库来说

    作者回复: 是的,这样一来,对开源库的维护者来说,有了更高的要求,我们需要明确自己的代码中哪些是封闭的,哪些是开放的。 表面上看,Kotlin变得麻烦了。不过,反过来看,这难道不就是维护者本来就该弄清楚的问题吗?其实,这个问题一直存在,只是因为Java选择忽视这个问题,而Kotlin的选择是面对这个问题。

    共 2 条评论
    8
  • 初升的太阳
    2021-12-29
    由于我们的密封类只有这三种情况,所以我们的 when 表达式不需要 else 分支。可以看到,这样的代码风格,既实现了类似枚举类的逻辑完备性,还完美实现了数据结构的封装。 没看出来和枚举的区别

    作者回复: 请注意:枚举类没办法和数据类进行结合,来承载我们的网络请求数据。但是密封类可以。

    共 5 条评论
    7
  • Geek_70c6da
    2021-12-30
    请教老师,kotlin对象的深拷贝有什么优雅的写法吗

    作者回复: 有的,我们可以通过元编程来解决。这个问题我会记录下来,后面找机会跟大家分享一下。

    
    6
  • JakePrim
    2021-12-29
    密封类不是很理解,为什么密封类的内部 要使用data class 呢?如何正确的定义密封类?

    作者回复: 并不是说所有的密封类都要用data class,只是在这个案例当中,我们是用来承载网络请求数据的。既然是承载数据,当然就要用数据类啦!至于如何正确定义密封类,其实文章当中的这种模式就是最常见,也是最使用的方式。

    共 3 条评论
    5
  • 白乾涛
    2022-01-14
    val (name, age) = tom 这里的顺序是和构造方法里面的一致呢 还是不需要一致,只需要变量名一样呢

    作者回复: 按照顺序的,这一点我们写一个简单的代码就可以验证。 // 不推荐, val (age, name) = Person1("tom", 1) println(age) println(name) 但是,正确做法,我们应该是让变量名与顺序都一致。

    
    3
  • A Lonely Cat
    2022-01-10
    相应地,如果想在 Kotlin 当中定义一个普通的内部类,我们需要在嵌套类的前面加上 inner 关键字。 这下面的代码有误,IDE 会报错,我猜朱老师是想写下面这段代码吧 init { println(name) foo() }

    作者回复: 写文章的时候为了突出重点忘记兼顾语法了,我重新调整一下。感谢你指出这个问题,你让这个课程变得更好了。

    
    3
  • 百炼钢
    2022-02-24
    密封类的设计目的没太明白,可能我对java的枚举理解不深,导致老师用枚举来解释密封类,让我更糊涂了… 自问:密封类设计目的是为了辅助 when 表达式的使用吗?按文中的例子也可以用继承来实现,那么密封类的作用就是简化代码吗?

    作者回复: 枚举类、密封类的特点就是when表达式“自动判断完备”,咱们自己写的继承类,是不具备这一优势的。别小看“自动判断完备”,它的作用很大。

    共 7 条评论
    2
  • 郑峰
    2022-01-10
    You can declare properties in interfaces. A property declared in an interface can either be abstract or provide implementations for accessors. Properties declared in interfaces can't have backing fields, and therefore accessors declared in interfaces can't reference them.

    作者回复: 嗯,不错。

    
    2