【发布时间】:2015-09-11 07:53:26
【问题描述】:
我有一个带有两个参数的 Scala 类和另一个参数构造函数。对于单参数构造函数,我调用了一个方法来获取两个元素的元组,并尝试将元组用于需要两个参数的构造函数的参数。从这个帖子:Scala tuple unpacking for constructors我可以得到非继承情况的答案,但我需要使用继承情况的方法。
这是我的代码,但我不确定如何实例化抽象类。
abstract class A(val a:Int, val b:Int) {
def h()// = ???
}
object A {
def apply(pair: (Int, Int)): A = new A(pair._1, pair._2)
def apply(v: Int): A = A(vals(v))
def vals(v:Int) = {
(v,v)
}
}
class B(override val a:Int, override val b:Int) extends A(a,b) {
override def h() = ???
}
object B {
def apply(pair: (Int, Int)): B = new B(pair._1, pair._2)
def apply(v: Int): B = B(A.vals(v))
}
object Main extends App {
val a = B(10)
println(a.a, a.b)
}
当然,如果我尝试实例化抽象类,我会收到一条错误消息。
error: class A is abstract; cannot be instantiated
def apply(pair: (Int, Int)): A = new A(pair._1, pair._2)
^
我认为最简单的解决方案就是让抽象类成为非抽象类,并给出假体def h() = ???。但是,我不确定是否有更好的方法。
【问题讨论】:
-
由于
A永远无法直接实例化,因此这里不需要构造函数或工厂方法 - 删除A的伴随对象(并将vals方法移至B的伴生对象),你应该没事。 -
@Shadowlands:我明白了,谢谢。
标签: scala inheritance