访问(/导入)Scala枚举
对于以下HwLogger.PersisterType枚举:访问(/导入)Scala枚举,scala,enumeration,Scala,Enumeration,对于以下HwLogger.PersisterType枚举: object HwLogger extends Serializable { object PersisterType extends Enumeration { type Persisters = Value val FilePersister, HdfsPersister, SocketPersister = Value } } 在同伴类中-我们如何访问它?请注意下面大量的导入 class HwLog
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
}
}
在接受答案(以及arraybuffer append运算符上的语法更正)后更新,以下是更正的代码:
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
中的类型和值
class HwLogger extends Serializable {
import collection.mutable.ArrayBuffer
import HwLogger.PersisterType._
val persisterTypes = ArrayBuffer[Persisters]()
def setDefaults: Unit = {
persisterTypes += FilePersister += HdfsPersister
}
}
翼潜艇?翅膀是如何在水下运动的?我看了你的代码和你的评论。请注意,OP中已经包含了以下导入:导入HwLogger.PersisterType.\uu那么您建议的新逻辑是什么?
ArrayBuffer[Persisters]
是您需要的关键更改。至于名字,我只是喜欢它所唤起的意象:)哦,就在你上一篇文章发表前不久,我看到了它。谢谢你的眼睛。如果我有翅膀,我会紧贴天空,避免水的阻力。最后,最好的解决办法是将“类型”更改为与对象名称相同。我本不想让他们分道扬镳,但事情就这样发生了。