Scala - 创建扩展密封抽象的案例对象列表 class
Scala - Create a List of case objects that extend an sealed abstract class
我正在尝试在伴生对象中创建案例对象列表。这些对象都继承自一个密封的抽象class。但是编译器对列表中的每个项目说 "not found: value CompositeSpectrum" 等等。密封的 class 和 case 对象都可以正常编译,只是当我尝试在伴随对象中创建列表时出现错误。
sealed abstract class Peculiarity(val abbreviation: String, val description: String) {
case object CompositeSpectrum extends Peculiarity("comp", "composite spectrum")
case object NebularFeaturesPresent extends Peculiarity("neb", "nebular features present")
case object ShellStar extends Peculiarity("sh", "shell star")
case object Uncertainty extends Peculiarity(":", "uncertainty")
case object VariableSpectralFeatures extends Peculiarity("var", "variable spectral features")
case object WeakFeatures extends Peculiarity("wl", "weak features")
case object VeryBroadAbsorptionFeatures extends Peculiarity("nn", "very broad absorption features")
case object BroadAbsorptionFeatures extends Peculiarity("n", "broad absorption features")
case object EmissionLinesPresent extends Peculiarity("e", "emission lines present")
case object NIIIandHEIIEmission extends Peculiarity("f", "NIII and HeII emission (O stars)")
case object EnhancedMetalFeatures extends Peculiarity("m", "enhanced metal features")
case object OtherPeculiarity extends Peculiarity("p", "other peculiarity")
case object VeryNarrowAbsorptionLines extends Peculiarity("s", "very narrow absorption lines")
}
object Peculiarity {
val peculiarities = List[Peculiarity](
CompositeSpectrum,
NebularFeaturesPresent,
ShellStar,
Uncertainty,
VariableSpectralFeatures,
WeakFeatures,
VeryBroadAbsorptionFeatures,
BroadAbsorptionFeatures,
EmissionLinesPresent,
NIIIandHEIIEmission,
EnhancedMetalFeatures,
OtherPeculiarity,
VeryNarrowAbsorptionLines)
}
因为这些对象不存在,除非它们被 Peculiarity
类型的实例引用,因为它们被声明为 Peculiarity
.
的内部对象
val pec = new Peculiarity("","") {}
val peculiarities = List[Peculiarity](
pec.CompositeSpectrum,
pec.NebularFeaturesPresent,
...
但我怀疑你在做什么,你可以把声明移到抽象之外class
sealed abstract class Peculiarity(val abbreviation: String, val description: String)
case object CompositeSpectrum extends Peculiarity("comp", "composite spectrum")
case object NebularFeaturesPresent extends Peculiarity("neb", "nebular features present")
...
然后你的声明就可以正常工作了。
无需将 case object
嵌套在密封的摘要 class 中。
这是为我编译的。
sealed abstract class Peculiarity(val abbreviation: String, val description: String)
case object CompositeSpectrum extends Peculiarity("comp", "composite spectrum")
case object NebularFeaturesPresent extends Peculiarity("neb", "nebular features present")
case object ShellStar extends Peculiarity("sh", "shell star")
case object Uncertainty extends Peculiarity(":", "uncertainty")
case object VariableSpectralFeatures extends Peculiarity("var", "variable spectral features")
case object WeakFeatures extends Peculiarity("wl", "weak features")
case object VeryBroadAbsorptionFeatures extends Peculiarity("nn", "very broad absorption features")
case object BroadAbsorptionFeatures extends Peculiarity("n", "broad absorption features")
case object EmissionLinesPresent extends Peculiarity("e", "emission lines present")
case object NIIIandHEIIEmission extends Peculiarity("f", "NIII and HeII emission (O stars)")
case object EnhancedMetalFeatures extends Peculiarity("m", "enhanced metal features")
case object OtherPeculiarity extends Peculiarity("p", "other peculiarity")
case object VeryNarrowAbsorptionLines extends Peculiarity("s", "very narrow absorption lines")
object Peculiarity {
val peculiarities = List[Peculiarity](
CompositeSpectrum,
NebularFeaturesPresent,
ShellStar,
Uncertainty,
VariableSpectralFeatures,
WeakFeatures,
VeryBroadAbsorptionFeatures,
BroadAbsorptionFeatures,
EmissionLinesPresent,
NIIIandHEIIEmission,
EnhancedMetalFeatures,
OtherPeculiarity,
VeryNarrowAbsorptionLines)
}
我正在尝试在伴生对象中创建案例对象列表。这些对象都继承自一个密封的抽象class。但是编译器对列表中的每个项目说 "not found: value CompositeSpectrum" 等等。密封的 class 和 case 对象都可以正常编译,只是当我尝试在伴随对象中创建列表时出现错误。
sealed abstract class Peculiarity(val abbreviation: String, val description: String) {
case object CompositeSpectrum extends Peculiarity("comp", "composite spectrum")
case object NebularFeaturesPresent extends Peculiarity("neb", "nebular features present")
case object ShellStar extends Peculiarity("sh", "shell star")
case object Uncertainty extends Peculiarity(":", "uncertainty")
case object VariableSpectralFeatures extends Peculiarity("var", "variable spectral features")
case object WeakFeatures extends Peculiarity("wl", "weak features")
case object VeryBroadAbsorptionFeatures extends Peculiarity("nn", "very broad absorption features")
case object BroadAbsorptionFeatures extends Peculiarity("n", "broad absorption features")
case object EmissionLinesPresent extends Peculiarity("e", "emission lines present")
case object NIIIandHEIIEmission extends Peculiarity("f", "NIII and HeII emission (O stars)")
case object EnhancedMetalFeatures extends Peculiarity("m", "enhanced metal features")
case object OtherPeculiarity extends Peculiarity("p", "other peculiarity")
case object VeryNarrowAbsorptionLines extends Peculiarity("s", "very narrow absorption lines")
}
object Peculiarity {
val peculiarities = List[Peculiarity](
CompositeSpectrum,
NebularFeaturesPresent,
ShellStar,
Uncertainty,
VariableSpectralFeatures,
WeakFeatures,
VeryBroadAbsorptionFeatures,
BroadAbsorptionFeatures,
EmissionLinesPresent,
NIIIandHEIIEmission,
EnhancedMetalFeatures,
OtherPeculiarity,
VeryNarrowAbsorptionLines)
}
因为这些对象不存在,除非它们被 Peculiarity
类型的实例引用,因为它们被声明为 Peculiarity
.
val pec = new Peculiarity("","") {}
val peculiarities = List[Peculiarity](
pec.CompositeSpectrum,
pec.NebularFeaturesPresent,
...
但我怀疑你在做什么,你可以把声明移到抽象之外class
sealed abstract class Peculiarity(val abbreviation: String, val description: String)
case object CompositeSpectrum extends Peculiarity("comp", "composite spectrum")
case object NebularFeaturesPresent extends Peculiarity("neb", "nebular features present")
...
然后你的声明就可以正常工作了。
无需将 case object
嵌套在密封的摘要 class 中。
这是为我编译的。
sealed abstract class Peculiarity(val abbreviation: String, val description: String)
case object CompositeSpectrum extends Peculiarity("comp", "composite spectrum")
case object NebularFeaturesPresent extends Peculiarity("neb", "nebular features present")
case object ShellStar extends Peculiarity("sh", "shell star")
case object Uncertainty extends Peculiarity(":", "uncertainty")
case object VariableSpectralFeatures extends Peculiarity("var", "variable spectral features")
case object WeakFeatures extends Peculiarity("wl", "weak features")
case object VeryBroadAbsorptionFeatures extends Peculiarity("nn", "very broad absorption features")
case object BroadAbsorptionFeatures extends Peculiarity("n", "broad absorption features")
case object EmissionLinesPresent extends Peculiarity("e", "emission lines present")
case object NIIIandHEIIEmission extends Peculiarity("f", "NIII and HeII emission (O stars)")
case object EnhancedMetalFeatures extends Peculiarity("m", "enhanced metal features")
case object OtherPeculiarity extends Peculiarity("p", "other peculiarity")
case object VeryNarrowAbsorptionLines extends Peculiarity("s", "very narrow absorption lines")
object Peculiarity {
val peculiarities = List[Peculiarity](
CompositeSpectrum,
NebularFeaturesPresent,
ShellStar,
Uncertainty,
VariableSpectralFeatures,
WeakFeatures,
VeryBroadAbsorptionFeatures,
BroadAbsorptionFeatures,
EmissionLinesPresent,
NIIIandHEIIEmission,
EnhancedMetalFeatures,
OtherPeculiarity,
VeryNarrowAbsorptionLines)
}