gpt4 book ai didi

java - 在 Scala 中获取通用 Java Enum 的 int 值很热

转载 作者:行者123 更新时间:2023-12-02 05:55:25 27 4
gpt4 key购买 nike

我在 java 文件中声明了一些枚举:

public class Enums {    
public static enum Achievement {NORMAL, PROGRESSIVE}
public static enum Log {INFO,WARNING,ERROR}
public static enum Game {ONE_TIME, GRADUAL}}

现在在 scala 文件中,假设我有:

val key: Log = Log.INFO
val typ: Class[_] = getType(key)

我需要做的是:

Enum.valueOf(typ, "INFO")

不幸的是,这种方法会导致各种类型错误,例如

 > Error:(65, 29) type mismatch;
found : Class[?0] where type ?0
required: Class[T]
val nr = Enum.valueOf(result,
^

你有什么想法吗?在这种情况下有什么方法可以创建枚举或获取其序数吗? getType 使用反射来查找类中字段的类型并进行模式匹配以进行转换。

编辑<<<<<<

简单地解决了这个问题:

  val enum  = typ.getEnumConstants().find(_.toString.equals("INFO"))
val ordinal = enum match {
case Some(enum) => enum.asInstanceOf[Enum[_]].ordinal()
case None =>
}

最佳答案

类的类型参数总是一个小问题。

scala> def typ[A <: Enum[A]]: Class[A] = classOf[Thread.State].asInstanceOf[Class[A]]
typ: [A <: Enum[A]]=> Class[A]

scala> Enum.valueOf[Thread.State](typ, "RUNNABLE")
res7: Thread.State = RUNNABLE

scala> Enum.valueOf(typ[Thread.State], "RUNNABLE")
res8: Thread.State = RUNNABLE

关于java - 在 Scala 中获取通用 Java Enum 的 int 值很热,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23140812/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com