加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

获取Scala中的所有枚举案例对象值

发布时间:2020-12-16 18:36:18 所属栏目:安全 来源:网络整理
导读:在 Scala中,枚举是一个有争议的领域,许多人(包括我自己)比使用任何基于库的枚举更多地使用案例对象.这很好,除了那个没有得到所有可能值的列表,有时需要它.我手动维护了这些列表(allKeys),但这很乏味且容易出错. 问题是:如何使用Scala 2.11 TypeTags或反射来
在 Scala中,枚举是一个有争议的领域,许多人(包括我自己)比使用任何基于库的枚举更多地使用案例对象.这很好,除了那个没有得到所有可能值的列表,有时需要它.我手动维护了这些列表(allKeys),但这很乏味且容易出错.

问题是:如何使用Scala 2.11 TypeTags或反射来创建这样的列表?

两种方法之一可行:

>获取密封类的所有派生实例
>获取在特定对象中声明的所有案例对象

注意:有samples似乎承诺我正在寻找什么.但这太过分了 – 必须有一个几乎一个班轮才能得到相同的东西?

以下是对此的测试.我怎么能实现allOf功能?

class ManifestToolsTest extends UnitTest {

  behavior of "ManifestTools" {

    sealed class MyEnum

    object MyEnum {
      case object A extends MyEnum
      case object B extends MyEnum
      case object C extends MyEnum

      val x= 10           // should not be listed
      def f(x: Int) = x   // should not be listed
    }

    def allOf[T]: Seq[T] = {
      ...  
    }

    it should "be able to list the 'case object' members of an object" in {

      val tmp: Seq[MyEnum] = allOf[MyEnum]
      tmp should contain theSameElementsAs( List(MyEnum.A,MyEnum.B,MyEnum.C) )
    }
  }
}

我试图从Scala文档中获取这些信息,但是当涉及到反射时,事情真的很抽象.我相信上述需求(应该)由Scala 2.11涵盖.

参考文献:

> Case objects vs Enumerations in Scala

解决方法

我找到了 cure,名为Enumeratum,但我认为无论如何我都会发布这个问题,以便人们更容易找到这件新的宏观珠宝.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读