我正在为超类编写insertInOrder
函数,但无法从方法中访问值age
:
abstract class Parent(age: Int)
case class Child1(age: Int) extends Parent(age)
case class Child2(age: Int) extends Parent(age)
def insertInOrder [U >: Parent] (x: U, acc: List[U] ): List[U] ;
// value age is not a member of type parameter U
我试过了:
def insertInOrder [U >: Parent, U <: Nothing] (x: U, acc: List[U] ): List[U] = {
// U is already defined as type U
我该怎么办?
答案 0 :(得分:1)
在Parent非案例类中没有为age constructor参数创建getter / setter。所以添加&#39; val&#39; (也许&#39;受保护的val&#39;如果它不应该在派生类之外公开)。
一些例子和一个很好的总结: https://www.safaribooksonline.com/library/view/scala-cookbook/9781449340292/ch04s03.html
答案 1 :(得分:1)
abstract class Parent(val age: Int)
将生成您正在寻找的吸气剂。
答案 2 :(得分:1)
在您的示例中,在抽象中定义的年龄不可访问,您需要在其前面添加val以便可以从Parent访问。但是,对于Child的案例类覆盖,您将遇到问题。你的U字型绑定也不正确。我建议你修改代码:
trait Parent {
def age: Int
}
case class Child1(age: Int) extends Parent
case class Child2(age: Int) extends Parent
def insertInOrder [U <: Parent] (x: U) = {
println(x.age)
}
insertInOrder(Child1(10))