kotlin学习day10: 枚举和字符串模板

来源:互联网 发布:flash10.0软件下载 编辑:程序博客网 时间:2024/06/01 18:48

Kotlin-枚举

在 Kotlin中,枚举使用关键词enum, enum class对应Java中的enum,Kotlin中,enum 又叫做软关键词(soft keyword):当它出现在 class 之前时,它就有了特殊的含义。但是你可以在其他地方把它当做常规名字来使用。另一方面,class依然是一个关键词。你依然需要把变量命名为(class关键字以外的名
字) clazz 或aClass。像ava那样,枚举类型并不是一个值的列表:你可以在枚举类中声明属性和方法。

声明一个枚举:
 

enum class Color(val r: Int, val g: Int, val b: Int // 1 声明枚举常量的属性) {RED(255, 0, 0), ORANGE(255, 265, 0), // 2 当每个常量被创建时指定属性值YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255),INDIGO(75, 0, 130), VIOLET(238, 130, 238); // 3 分号(;)在这里是必须的fun rgb() = (r * 256 + g) * 256 + b // 4 在枚举类中定义了一个方法}

枚举常量使用了跟在常规类中声明构造函数和属性同样的语法。当声明每一个枚举常量时,需要为常量提供属性值。注意,这个示例中展示了 Kotlin 语法中唯一一处需要你使用分号的地方:如果你在枚举类中定义了任何方法,(请使用)分号将枚举常量列表从函数定义中分隔开来。

枚举类的简单使用

模拟我们项目开发中最常用的一种场景:客户端和服务器约定几种类型,然后不同的类型展示不同的样式,在Java中,基本都会使用switch语句或者if-else表达式,但在Kotlin中,我们可以使用更加强大的when表达式,例如:根据输入的color,我们输出color的名字:

fun getColorName(color: Color) = // 1 直接返回一个when表达式    when (color) { // 2 如果颜色等于枚举常量,返回对应的字符串    Color.RED -> "Richard"    Color.ORANGE -> "Of"    Color.YELLOW -> "York"    Color.GREEN -> "Grave"    Color.BLUE -> "Battle"    Color.INDIGO -> "In"    Color.VIOLET -> "Vain"}

上面这样使用了枚举常量的完整名称,指定了Color枚举类名。当然我们也可以直接通过导入常量值的方式来简化代码:

顶层包导入:

import com.example.admin.kotlindemo.Color.*

然后就可以通过名字来使用常量:

fun getWarmth(color: Color) = when (color) {    RED, ORANGE, YELLOW -> "warm" // 3 通过名字来使用常量    GREEN -> "neutral"    BLUE, INDIGO, VIOLET -> "cold"}

注:为什么我们这里函数体的定义直接使用了when表达式呢?因为kotlin中 when 是一个返回值的表达式,因此一个有表达式主体的函数可以直接返回when表达式

Kotlin-字符串模板

让我们来回忆一下Android开发中最常出现的一种场景:
假设我们有个User类

public class User {    private int age;    private String name;    private int sex;    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getSex() {        return sex;    }    public void setSex(int sex) {        this.sex = sex;    }}

TextView要显示他的基本信息:
Java我们一般会拼接成字符串或者使用格式化形式,例如:

 User user = new User(); String sex; if (user.getSex() == 0) {        sex = "男";   } else {       sex = "女";  }textView.setText(user.getName() + "的性别是:" + sex);

是不是很麻烦?但是在Kotlin中,我们只需要:

textview.text = "${user.name}的性别是${if(user.sex==0) "男" else "女"}"

以上的示例介绍了叫做字符串模板的特性。在代码中,我们可以像很多脚本语言一样,在字符串值中通过在变量名前面放置$字符来引用局部变量或者表达式。这相当于Java的字符串串拼接,但是更加紧凑和高效。当然,表达式是静态检查的。如果尝试着去应用一个不存在的变量,代码不会通过编译。如果你需要在一个字符串中包含 $ 符号,你可以使用转义功能: println(“$x”) ,打印 $x 但不会讲 x 解析为变量引用。上面的使用字符串模板的时候使用了一个简单的表达式,并且在双引号内部嵌套了双引号,当然也可以仅仅使用表达式或者字符串变量。

原创粉丝点击