【发布时间】:2014-08-26 02:33:13
【问题描述】:
我有以下课程:
class C {
c1: Int,
c2: Int,
c3: String,
...
c40: Long
}
class A extends C {
a1: Int
}
class B extends C {
b1: Int,
b2: String
}
然后我需要在 A 的实例的基础上创建 B 的实例,并复制从 C 继承的字段的所有值,例如:
new B(50, "S", c1 = a.c1, c2 = a.c2, ..., c40 = a.c40)
但我想避免编写样板,例如:c1 = a.c1, c2 = a.c2, ..., c40 = a.c40
如何以 scala 方式有效地完成此操作,但仍保持静态定义的字段名称(不使用映射或其他无模式方法)?
一种解决方案是使用组合:
class A {
a1: Int,
base: C
}
class B {
base: C,
b1: Int,
b2: String
}
然后写:new B(50, "S", base = a.base)
但在这种情况下,在所有其他代码中,如果我需要引用基础部分的值,我需要编写 b.base.c1 而不是 b.c1 - 我也想避免这种情况。
【问题讨论】:
-
在所有其他代码中,如果我需要参考基础部分的值,我需要编写 b.base.c1 而不是 b.c1 你可以做
import b.base._并参考毫不费力地到达那个领域。 -
这种方法只有在你只使用一个实体并在几个地方处理它时才有效。
-
这两个答案对你有用吗?您是否需要任何人作出任何澄清?
标签: scala inheritance copy boilerplate