2

我正在尝试在伴随对象中创建案例对象列表。这些对象都继承自一个密封的抽象类。但是编译器对列表中的每个项目都说“未找到:值 CompositeSpectrum”等等。密封的类和案例对象都编译得很好,只是当我尝试在伴随对象中创建列表时,我得到了错误。

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)
}
4

2 回答 2

2

因为这些对象不存在,除非它们被类型的实例引用,Peculiarity因为它们被声明为Peculiarity.

val pec = new Peculiarity("","") {}
val peculiarities = List[Peculiarity](
  pec.CompositeSpectrum,
  pec.NebularFeaturesPresent,
  ...

但我怀疑你所追求的,你可以将声明移到抽象类之外

  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")
  ...

然后你的声明就可以正常工作了。

于 2017-01-09T00:31:25.963 回答
1

无需将case objects 嵌套在密封的抽象类中。

这为我编译。

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)
}
于 2017-01-09T00:31:43.907 回答