前言

Kotlin作为JVM系的语言,起源于Java又不同于Java。通过在语言层面比较两者的区别,可以使得开发者能够快速学习,融会贯通。

枚举使用场景

使用枚举的场景非常明确,即只要一个类的对象是有限且固定的,就可以使用枚举。枚举常常会与常量做比较,它们有着若干的区别:

常量无法保证类型安全,因为常量没有限定范围,对于接受常量的参数可以传入非法数据,为此需要做校验或者额外处理。而枚举类型是有固定范围的,不可能传入该范围之外的枚举类型。

常量不能都用==来进行比较,有时需要使用equals。但是枚举可以直接只用==进行比较。

常量就是成员变量,不能添加方法,不能继承接口等。而枚举是类,可以添加方法,也可以继承接口,更为灵活。

简单的枚举类

Java

通过enum关键字来定义枚举类,且没有class关键字:

public enum SeasonEnum {

SPRING,SUMMER,FALL,WINTER

}

非抽象的枚举类默认使用final修饰,不可以被继承。且其构造函数只能是私有的。

Kotlin

通过enum class关键字来定义枚举:

enum class Direction {

NORTH, SOUTH, WEST, EAST

}

传入参数的枚举类

Java

public enum SeasonEnum {

SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天"); //需要添加分号

private final String name

private SeasonEnum(String na;me)

{

this.name = name;

}

public String getName() {

return name;

}

}

在该例中,可以向枚举对象的构造方法中传入参数。在枚举类中若有成员变量或方法,需要在枚举对象列表末尾添加分号。

Kotlin

enum class Color(val rgb: Int) {

RED(0xFF0000),

GREEN(0x00FF00),

BLUE(0x0000FF)

}

在枚举类中传入主构造函数的参数。

枚举继承接口

Java

public enum Operation {

PLUS{

@Override

public double eval(double x, double y) {

return x + y;

}

},

MINUS{

@Override

public double eval(double x, double y) {

return x - y;

}

};

//抽象方法,由枚举对象实现

public abstract double eval(double x, double y);

枚举类的抽象方法,写在枚举类的类体中。枚举对象后添加对于该接口中抽象方法的实现。

Kotlin

enum class ProtocolState {

WAITING {

override fun signal() = TALKING

},

TALKING {

override fun signal() = WAITING

};

abstract fun signal(): ProtocolState

}

Kotlin的是实现方式与Java几乎一致,只是一般情况下Kotlin中都不用添加分号,而此时需要在枚举对象后添加分号。

Kotlin不仅可以实现自身的抽象方法,还可以实现外部其他接口的抽象方法:

enum class IntArithmetics : BinaryOperator, IntBinaryOperator {

PLUS {

override fun apply(t: Int, u: Int): Int = t + u

},

TIMES {

override fun apply(t: Int, u: Int): Int = t * u

};

override fun applyAsInt(t: Int, u: Int) = apply(t, u)

}

即抽象方法不是在枚举类中定义的,而是在其他接口中定义的。

枚举类常用方法

Java

在Java中提供了values()方法用于返回枚举类的对象集合,常用于迭代枚举对象:

for(ColorEnum temp:ColorEnum.values()){

System.out.println(temp);

}

同时也提供了通过常量名获取枚举对象的方法valueOf:

ColorEnum red = ColorEnum.valueOf("RED");

Kotlin

Kotlin也提供了类似的方法,假设枚举名为EnumClass:

EnumClass.valueOf(value: String): EnumClass

EnumClass.values(): Array

同时,在Kotlin中,枚举类还有默认属性:

val name: String

val ordinal: Int

用于表示该枚举对象名与位置。

enum java 比较_Kotlin与Java比较:枚举类相关推荐

  1. JAVA第四次作业——使用枚举类对扑克牌建模

    0x00 简述 使用枚举类型对一副扑克牌(52张牌,不包括大小王)建模: 一副扑克牌有四种花色(Suit):HEART,SPADE,DIAMOND,CLUB: 有十三种等级(Rank):ACE,TWO ...

  2. java 动态更新_java动态更新枚举类

    工作中遇到需要对枚举类的值进行动态更新 手动改不现实也不方便 现记录下来方便以后学习使用 1.在工程utils包中添加动态更新枚举类得工具类(根据自己得项目,放到指定位置调用就可以) 2.一开始陷入了 ...

  3. kotlin和java差别_Kotlin和Java的常用方法的区别总结

    一.kotlin和java的常用语法区别 1).类.public class.public final class java 1 2public final class User{ } 1 2publ ...

  4. java学习(171): 枚举类

    定义一个枚举类 //枚举类型 public enum test122 {RED,GREEN,BLUE;} 测试类 public class test123 {public static void ma ...

  5. kotlin和java语言_Kotlin VS Java – 2020年您应该学习哪种编程语言?

    kotlin和java语言 It has been several years since Kotlin came out, and it has been doing well. Since it ...

  6. java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  7. java枚举类型数组_Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  8. 【Java】6.9 枚举类

    目录 枚举类简介 实现枚举类 枚举类的成员变量.方法和构造器 枚举类简介 [什么是枚举类?] 枚举类就是实例有限且固定的类.且在定义时,枚举类要在第一行全部列出 [为什么要是用枚举类?] 使用枚举类可 ...

  9. 你连简单的枚举类都不知道,还敢说自己会Java???滚出我的公司

    枚举类型是Java 5中新增的特性,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性.安全性以及便捷性.当 ...

最新文章

  1. RocketMQ各角色介绍
  2. 高仿美团钱包首页CollapsingToolbarLayout监听滑动隐藏效果(公司项目)
  3. java6 3_2018.3.6 Java web notes:
  4. Makefile-filter和filter-out
  5. 自定义view imageviw
  6. Python实现微信自动发送消息
  7. Profinet简介
  8. 2018 蓝桥杯 C++ A组 1-7
  9. 把一个代表DateTime带有T和Z的string转化成DateTime c#
  10. 为Linux草根队加油
  11. 强光手电充电快才能持久使用(LDR6328S)
  12. Vue中链接生成二维码
  13. 【软件】Chrome 浏览器下载文件崩溃
  14. Python---第8天---字符串
  15. 通俗易懂的机器学习入门指导
  16. 剖析中移动未来之路之二
  17. 2022年十大数据泄露事件
  18. 很火的微信聊天界面个性签名设置方法,除了好看更重要的是...
  19. 问渠那得清如许,唯有源头活水来
  20. IOS APP内后台音乐播放

热门文章

  1. java list map 去重复_如何过滤ListMapString,Object 中的重复Map
  2. java 判断是否包含中文_java判断字符串中是否包含中文并过滤中文
  3. php 表单条件设置_PHP基础知识总结
  4. thinkcell插件_PPT大神私藏的5款插件,用好它们,小白也能快速做出精美的PPT
  5. 怎么在windows上启动python_Windows下如何安装和运行Python
  6. asp.net 获取全部在线用户_这款手绘风格的在线制图软件超棒
  7. python 随机数_python 随机数
  8. 介绍一下mysql的存储过程和搜索引擎_MySQL基础(四)—存储过程和存储引擎
  9. 前端改变窗口大小内容不变形_10个前端灵魂拷问丨吃透这些就能摆脱初级前端工程师...
  10. 图像处理自相关函数c语言,图像处理实验书.docx