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

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 解析为变量引用。上面的使用字符串模板的时候使用了一个简单的表达式,并且在双引号内部嵌套了双引号,当然也可以仅仅使用表达式或者字符串变量。

你可能感兴趣的:(android,Kotlin,enum,Kotlin枚举,Kotlin字符串模,enum-class,字符串模板)