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

Scala模式匹配Java枚举值

发布时间:2020-12-16 19:02:04 所属栏目:安全 来源:网络整理
导读:我有我的 java枚举,如:FOO(“foo”),BAR(“bar”)… 我有一个getValue()方法来返回枚举的值“foo”和“bar”,这必须是 Java. 另一方面,我必须在Scala中匹配: result match { case "foo" = 我正在努力做: result match { case Enum.FOO.getValue() = 我得
我有我的 java枚举,如:FOO(“foo”),BAR(“bar”)…
我有一个getValue()方法来返回枚举的值“foo”和“bar”,这必须是 Java.

另一方面,我必须在Scala中匹配:

result match {
  case "foo" =>

我正在努力做:

result match {
  case Enum.FOO.getValue() =>

我得到这个错误:

method getValue is not a case class constructor,nor does it have an
unapply/unapplySeq method

我不太确定这里发生了什么,因为我的getValue()方法返回一个String,为什么我不能使用它进行模式匹配?谢谢

解决方法

您可以对Java枚举进行模式匹配,但是您无法在匹配的解构部分中调用方法.所以这样做:

j match { case Jenum.FOO => "yay"; case _ => "boo" }

如果j是您的Java枚举(巧妙地标记为Jenum)的实例.

但是你可以这样做:

"foo" match {
  case s if s == Jenum.FOO.getValue => "yay"
  case _                            => "boo"
}

或者您可以先将字符串转换为枚举:

Jenum.values.find(_.getValue == "foo") match {
  case Some(Jenum.FOO) => "yay"
  case _               => "boo"
}

(您可能还想首先打开该选项,以避免重复一些(…)这么多次).

作为参考,这是我使用的测试枚举(Jenum.java):

public enum Jenum {
  FOO("foo"),BAR("bar");

  private final String value;
  Jenum(String value) { this.value = value; }

  public String getValue() { return value; }
}

(编辑:李大同)

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

    推荐文章
      热点阅读