【发布时间】:2021-05-20 18:04:29
【问题描述】:
我有以下特质和职业:
trait A{
def func1: String
def func2: Int
}
class F extends A{
def func1: String = ???
def func2: Int = ???
}
class G extends A{
def func1: String = ???
def func2: Int = ???
}
我想创建以下特征和类:
trait X{
val a: ***
}
class Z extends X{
override val a = new G
}
我需要在 trait X 中的 '***' 上写什么,以便我可以将 val a 分配给 F 或 G 类? 谢谢。
编辑
抱歉,我忘了说特征 A 是 A[Any],特征 F 和 G 可以是 'F extends A[String]' 和 'G extends A[Int]'。换句话说,类可以使用不同类型的参数扩展 trait A。
【问题讨论】:
-
val a: A不适合您吗?同样在Scala中,我们使用def而不是val在超类/特征中定义一个值成员 -
您是否希望
X的用户知道他们得到了哪个特定的A?还是应该只依赖于界面? -
@texasbruce 它显示'必需:A,找到:G'
-
@LuisMiguelMejíaSuárez 不,他们只需要获得 A 的实现并使用 func1 和 func2。不管是G类还是F类,Z类都必须能使用func1和func2