• Kotlin类:功能更强、而更简洁(KAD 03)


    作者:Antonio Leiva

    时间:Dec 7, 2016

    原文链接:http://antonioleiva.com/classes-kotlin/

    Kotlin类尽可能简单,这样用较少的代码完成更多的逻辑。

    我将快速展示怎样开始编写Kotlin类,它不同于Java类。

    1、类声明

    1 class Person

    只需用保留字class 加 类名。如果类里没有代码,大括号“{}”都不需要。

    说明:是否看见它没有用public修饰符吗?这是因为在Kotlin中所有都时默认为public。

    2、添加属性

    在Kotlin中,不存在域(或者至少你不需要声明它们)。类有属性。

    为了简单,属性替换Java域+getter+setter。这样,为我们的类来声明一对属性:

    1 class Person {
    2     var name = "Name"
    3     var surname = "Surname"
    4 }

    如果你要写setter,当然可以声明它:

    1 var name = "Name"
    2     set(value) {
    3         name = "Name: $value"
    4     }

    说明:如你所见,你可以直接转化变量为字符串(),而不用String.format。

     

    你是否注意到这可节省一定数量的代码吗?所有的setter和getter都直接写出。

     

    3、添加构造函数

    通常,每个类仅需要一个构造函数。但在后续文章中,你能看到可以添加多个构造函数。

     

    如仅有一个构造函数,编写它的方法可以简化很多:

    1 class Person(val name: String, val surname: String)

    这会发生什么?

    1. 属性消失了?事实上,它们仍在那里。但是,如果构造函数的自变量是由var或val说明,这些属性就这行中同时创建了。
    2. 在类定义之后直接编写构造函数。你不需要额外创建方法和为属性赋值。

     

    4、现在可以在类内部创建函数

    接着,如你希望的那样,在内部使用属性:

    1 class Person(val name: String, val surname: String) {
    2     fun getFullName() = "$name $surname"
    3 }

    如上列所示,当数值是直接分配时,函数可以用简约的方式编写。但是,仍然可以用“旧式”Java方法编写:

    1 fun getFullName(): String {
    2     return "$name $surname"
    3 }

    在这种情况下,你需要定义返回类型。

     

    5、Kotlin中默认设置是关闭

     

    所以不能被扩展,并且子类(在类扩展情况下)不能重载父类函数,除非类用保留字open指明:

    1 open class Person(val name: String, val surname: String)
    2 class Cop(surname: String) : Person("Mr", surname)

    看到父类构造函数是怎样被调用的吧。简单清晰!

    结论

    在这篇文章中,你已经见到Java类和Kotlin类之间的一些不同之处。如何你要了解更多,我建议你订阅接收我为你准备的一组文章。

  • 相关阅读:
    Scrapy settings 并发数更改
    tp5 规避 [ error ] 未定义数组索引
    967. Numbers With Same Consecutive Differences
    846. Hand of Straights
    1103. Distribute Candies to People
    559. Maximum Depth of N-ary Tree
    1038. Binary Search Tree to Greater Sum Tree
    538. Convert BST to Greater Tree
    541. Reverse String II
    1551. Minimum Operations to Make Array Equal
  • 原文地址:https://www.cnblogs.com/figozhg/p/6146430.html
Copyright © 2020-2023  润新知