scala自泛型非法继承
基本上这就是我想做的。 具有一个成员和另一个继承该成员并初始化该成员的特征。 然后是一个类,它接受必须从第一个trait继承的泛型类型并访问该成员scala自泛型非法继承,scala,oop,generics,inheritance,Scala,Oop,Generics,Inheritance,基本上这就是我想做的。 具有一个成员和另一个继承该成员并初始化该成员的特征。 然后是一个类,它接受必须从第一个trait继承的泛型类型并访问该成员 object main extends App{ val z = new c[b]() z.p() } trait a{ val x : String } trait b extends a { val x = 1 } class c [A <: a] { self: A => def p(): Unit =
object main extends App{
val z = new c[b]()
z.p()
}
trait a{
val x : String
}
trait b extends a {
val x = 1
}
class c [A <: a] {
self: A =>
def p(): Unit ={
print(x)
}
}
c[b]带下划线,编译器抱怨
非法继承,自类型c[b]不符合A
我想定义继承自父特征的多个特征,然后定义一个类,该类接受父-子特征之一并访问其值我找到了答案,我只需在创建对象时扩展它,如下所示:
object main extends App{
val z = new c[b] with b
z.p()
}
trait a{
val x : String
}
trait b extends a {
val x = "1"
}
class c[A <: a]{
this: A =>
def p(): Unit ={
print(x)
}
}
objectmain扩展应用程序{
val z=带b的新c[b]
z、 p()
}
特征a{
val x:字符串
}
特质b延伸到a{
val x=“1”
}
c类[A]
defp():单位={
打印(x)
}
}
在这种情况下,坚持命名约定很有帮助:a)类、特征以大写开头。b)类型参数:单个大写字母c)其他类而不是单个字母。
object main extends App{
val z = new c[b] with b
z.p()
}
trait a{
val x : String
}
trait b extends a {
val x = "1"
}
class c[A <: a]{
this: A =>
def p(): Unit ={
print(x)
}
}