我正在尝试做这样的事情:
trait A[Out] {
protected def foo(): Out
}
trait B extends A[Int]
class WrapperB(b: B) extends B {
override protected def foo(): Int = b.foo() + 1
}
这不会编译,因为WrapperB
无法访问b.foo()
。
有几种方法可以解决这个问题,但这些方法对我不起作用:
foo
:不起作用,因为我希望它保持protected
。B
。还有其他办法吗?
答案 0 :(得分:4)
怎么样:
next()
我从来不喜欢trait A[Out] {
protected def foo(): Out
}
trait B extends A[Int] {
protected def gimme(that: B) = that.foo()
}
class WrapperB(b: B) extends B {
override protected def foo(): Int = gimme(b) + 1
}
和private
可以访问其他值的方法的想法,我认为这是糟糕的设计。 protected
应该是private
。如果您需要跨值访问,我认为您应该声明private[this]
,即使这意味着在您的情况下选择一个公共基础包。