scala特征案例类和继承

问题描述 投票:0回答:1

在scala中定义case类的类型层次结构时:

sealed trait FooBar {
  def A:Int
  def B:Int
  def C:Int
}

// works
final case class Bar(A:Int, B:Int, C:Int)extends FooBar

// fails
final case class Bar extends FooBar(A:Int, B:Int, C:Int)

// fails
final case class Foo extends FooBar

在定义继承类型时,如何避免指定已经继承的参数?这可能没有任何宏:Scala case classes and constructors

抽象类是否更适合此目的?

scala inheritance abstract-class traits case-class
1个回答
1
投票

那么,你宣称的是一种具有三种抽象方法的特征。

您的第一个实现声明了一个case类,其中3个值与FooBar中声明的抽象方法相匹配。由于Scala中没有括号和值的方法基本相同,因此可行。

你的第二个实现调用FooBar的构造函数,其中包含3个不存在的值。它从哪里获得A

您的第三个实现是声明一个没有实现抽象方法的具体类,并且无法编译。

我不知道你所要求的(理智的)解决方案。您正在声明抽象方法,并希望不实现它们。通过宏可能是可行的,但似乎很多工作没有太大的好处。

© www.soinside.com 2019 - 2024. All rights reserved.