enum java 比较_Kotlin与Java比较:枚举类

本文探讨了Kotlin和Java在枚举类使用上的差异,包括定义方式、传入参数、枚举继承接口以及枚举类的常用方法。Java通过enum关键字定义,Kotlin使用enum class。枚举在提供类型安全、简化比较和增强功能方面具有优势。Kotlin枚举可直接在枚举对象后添加实现,同时具备默认属性name和ordinal。
摘要由CSDN通过智能技术生成

前言

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值