栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

枚举的嵌套和归类 - 通过接口实现类似继承的效果

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

枚举的嵌套和归类 - 通过接口实现类似继承的效果

文章目录
  • 背景
  • 参考
  • 代码实现
  • 结果
  • 总结

背景

枚举因为无法使用继承,所以定义的枚举变量里如果要体现层级关系或者包含关系,需要通过接口来实现。

参考

枚举· 《On Java 8》中文版

代码实现
//枚举类
interface Food {
   enum class EastFood : Food {
       noodle,baozi
   }
   enum class WestFood : Food {
       piza
   }
}
  
//test调用
   fun test() {
       Log.d("enum_test", "enum_test")
       val p: Food = Food.EastFood.noodle

       if(p is Food){
           Log.d("enum_test", "p is class Food")
       }else{
           Log.d("enum_test", "p is not class Food")
       }

   		//kotlin的when 将它的参数与所有的分支条件顺序比较,直到某个分支满足条件。
   		//这里when需要使用同一层级的标准判断,如如果两个分支都符合,满足前一个分支就退出了
       when (p) {
           is Food.EastFood -> { Log.d("enum_test", "p is class Food.EastFood")}
           is Food.WestFood -> {Log.d("enum_test", "p is class Food.WestFood")}
           Food.EastFood.noodle -> {Log.d("enum_test", "p: Food.EastFood.noodle")}
           Food.EastFood.baozi -> {Log.d("enum_test", "p: Food.EastFood.baozi")}
           Food.WestFood.piza -> {Log.d("enum_test", "p: Food.WestFood.piza")}
           else ->{Log.d("enum_test", "nothing")}
       }

       when (p) {
           is Food.EastFood -> { Log.d("enum_test", "p is class Food.EastFood")}
           is Food.WestFood -> {Log.d("enum_test", "p is class Food.WestFood")}
           else ->{Log.d("enum_test", "nothing")}
       }

       when (p) {
           Food.EastFood.noodle -> {Log.d("enum_test", "p: Food.EastFood.noodle")}
           Food.EastFood.baozi -> {Log.d("enum_test", "p: Food.EastFood.baozi")}
           Food.WestFood.piza -> {Log.d("enum_test", "p: Food.WestFood.piza")}
           else ->{Log.d("enum_test", "nothing")}
       }
   }
结果

总结

枚举如何继承:

Java 中 Enum 如何继承?:
Enum的本质语义是把一个类的多个实例直接列举出来。
而继承是类的行为, 不是实例的行为。
因为在语义设计上不能被继承,所以在实现时要进行语法上的约束,编译器会将其声明为final。

枚举原理:

Java枚举的深入理解以及实现原理:
枚举本质上是通过普通的类来实现的,只是编译器为我们进行了处理。
每个枚举类型都继承自java.lang.Enum,并自动添加了values和valueOf方法。
而每个枚举常量是一个静态常量字段,使用内部类实现,该内部类继承了枚举类。
所有枚举常量都通过静态代码块来进行初始化,即在类加载期间就初始化。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1023974.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号