对于以下 HwLogger.PersisterType 枚举:
object HwLogger extends Serializable {
object PersisterType extends Enumeration {
type Persisters = Value
val FilePersister, HdfsPersister, SocketPersister = Value
}
}
在伴随类中 - 我们如何访问它?请注意下面的大量导入..
class HwLogger extends Serializable {
import collection.mutable.ArrayBuffer
import HwLogger.PersisterType._
import HwLogger.PersisterType
var persisterTypes = ArrayBuffer[PersisterType]() // Compiler says " error: not found: type PersisterType"
def setDefaults : Unit = {
import PersisterType._
persisterTypes ++ FilePersister ++ HdfsPersister
}
}
更新在接受答案(以及数组缓冲区追加运算符的语法更正)之后,这里是更正后的代码:
object HwLogger extends Serializable {
object PersisterType extends Enumeration {
type Persisters = Value
val FilePersister, HdfsPersister, SocketPersister = Value
}
}
class HwLogger extends Serializable {
import collection.mutable.ArrayBuffer
import HwLogger.PersisterType._
import HwLogger.PersisterType
var persisterTypes = ArrayBuffer[Persisters]() // This is the fix (Persisters instead of PersisterType)
def setDefaults : Unit = {
import PersisterType._
persisterTypes :+ FilePersister :+ HdfsPersister
}
}
** 另一个更新 **
更改枚举对象将避免麻烦:
object HwLogger extends Serializable {
object PersisterType extends Enumeration {
type PersisterType = Value // Changed the "type" to be same as object name
val FilePersister, HdfsPersister, SocketPersister = Value
}
}
class HwLogger extends Serializable {
import collection.mutable.ArrayBuffer
import HwLogger.PersisterType._
import HwLogger.PersisterType
var persisterTypes = ArrayBuffer[PersisterType]() // Revert back to PersisterType
def setDefaults : Unit = {
import PersisterType._
persisterTypes :+ FilePersister :+ HdfsPersister
}
}
最佳答案
枚举中元素的类型是Persisters
,而不是PersisterType
。 PersisterType
只是一个值。您确实需要导入 PersisterType
内部的类型和值才能使用 Enumeration
。
class HwLogger extends Serializable {
import collection.mutable.ArrayBuffer
import HwLogger.PersisterType._
val persisterTypes = ArrayBuffer[Persisters]()
def setDefaults: Unit = {
persisterTypes += FilePersister += HdfsPersister
}
}
关于scala - 访问(/导入)Scala 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23688791/