scala - 声明返回枚举的泛型方法

标签 scala generics enums

我想用 Scala 来实现以下 java 代码的模拟:

static <T extends Enum> T getEnumByPrefix(String prefix, Class<T> enumClass) {
    for (T enumValue : enumClass.getEnumConstants()) {
        if (enumValue.name().startsWith(prefix)) {
            return enumValue;
        }
    }
    throw new NoSuchElementException();
}

但我不知道如何声明 scala.Enumeration 的方法。

我试过了

def enumByPrefix[T <: Enumeration](prefix: String): T.Value = ...

但这不能编译。

我试过了

def enumByPrefix[T <: Enumeration.Value](columnLabel: String): T = ...

但这也不能编译。

基本上我想按如下方式使用它:

object PaymentMethod extends Enumeration {
  val Insurance, Cash = Value
}
...
val paymentMethod: PaymentMethod.Value = enumByPrefix[PaymentMethod]("Insurance")

(我使用 byPrefix 只是作为例子,实际算法会有所不同)。

最佳答案

scala> def enumByPrefix[T <: Enumeration](prefix: String, enum:T):Option[enum.Value] = 
              enum.values.find(_.toString.startsWith(prefix))

enumByPrefix: [T <: Enumeration](prefix: String, enum: T)Option[enum.Value]

WeekDay 一起使用(定义 here ):

scala> enumByPrefix("Mon",WeekDay)
res2: Option[WeekDay.Value] = Some(Mon)

scala> enumByPrefix("Mon",WeekDay).map(isWorkingDay)
res3: Option[Boolean] = Some(true)

关于scala - 声明返回枚举的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21511656/

相关文章:

c# - 如何将 float 和泛型相乘?

javascript - 从 JSON 对象访问 javascript 中的 Enum

go - 在泛型 go 中模拟方法类型参数

scala - 如何使用 Scala 的单例对象类型?

Scala 特征混合顺序和 super 调用

java - 如何在java中获取scala的TypeTag和ClassTag

java - Hibernate java.util.ArrayList 无法转换..类转换异常

ios - 为什么在枚举和开关的情况下需要强制展开?

Java 枚举值字段在定义之外不可访问

Scala 任务与参与者的并行化 => 调度程序如何工作?