我有以下Scala enum,我设计了after reading this answer:
object RunMode extends Enumeration {
val CLIENT_MODE = Value("CLIENT_MODE")
val SERVER_MODE = Value("SERVER_MODE")
}
我现在正试图将它的一个实例作为参数传递给另一个类的构造函数:
package com.me.myapp.shared.config
import com.me.myapp.shared.utils.RunMode
class MyAppConfig(runMode : RunMode) {
}
这给了我一个编译器错误:
无法解析符号
RunMode
BTW:com.me.myapp.shared.utils.RunMode
是 RunMode
的正确包裹路径,因此
我假设这可能是因为RunMode
对象只有(曾经)一个实例,并且可能阻止它作为arg传入。
无论哪种方式,我都不关心解决方案是什么。但我需要一个" enum"称为RunMode
,我需要能够将其实例传递给其他类的构造函数。有什么想法吗?
答案 0 :(得分:3)
你几乎就在那里,Enumeration
的值的正确类型是Enumeration.Value
,所以在这里你需要使用:
class MyAppConfig(runMode : RunMode.Value) {
}
答案 1 :(得分:3)
假设唯一存在于RunMode
类型的实例是object
本身,这是正确的。
然而,解决问题并不是那么困难。
object RunMode extends Enumeration {
type RunMode = Value
val CLIENT_MODE = Value("CLIENT_MODE")
val SERVER_MODE = Value("SERVER_MODE")
}
Enumeration
类为您提供类型Value
,它是所有枚举类型应具有的类型。它的范围是类实例,因此Enumeration
的每个实例都有自己的Value
类型。
您可以通过创建类型别名为其指定正确的名称。 然后你可以导入内部类型别名,如下所示:
import com.me.myapp.shared.utils.RunMode._
然后您可以传递Enumeration
周围的实例,因此也可以让MyAppConfig
与现在保持一致。
或者,您当然也可以省略类型别名,只需将MyAppConfig
的类型签名更改为RunMode.Value
即可。但是我相信前一种方法在澄清意图方面要好得多。
class MyAppConfig(runMode: RunMode.Value) {
}