我想用 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/