使用类型参数在 Scala 语言中创建子类
use type parameter for create subclass in scala language
全部!
我想使用类型参数创建子class,但 scala 给出 "error: class type required but T found"
。例如:
abstract class Base {def name:String}
class Derived extends Base {def name:String = "Derived"}
class Main[T <: Base]
{
class SubBase extends T {}; // <--- error: class type required but T found
val x:SubBase;
println(x.name)
}
val m:Main[Derived]
我想要这种方式而不是正常的继承,因为在实际代码中我有惰性变量,在 Base
中声明并在 Derived
中定义,这些变量应该在 Main
中执行计算class
我该怎么做?提前致谢
你可以使用自类型来实现类似的效果:
abstract class Base {def name:String}
class Derived extends Base {def name:String = "Derived"}
class Main[T <: Base]
{
trait SubBase { this: T => };
val x:SubBase;
println(x.name) // <--- error: value name is not a member of x
}
val m:Main[Derived]
但是,这只会让您访问 class 中 T
的成员。因此,您还可以 SubBase
extend Base
:
abstract class Base {def name:String}
class Derived extends Base {def name:String = "Derived"}
class Main[T <: Base]
{
trait SubBase extends Base { this: T => }
val x:SubBase;
println(x.name)
}
val m:Main[Derived]
这将编译,但没有用,因为 SubBase
也是 T
这一事实对 SubBase
.
仍然是私有的
全部!
我想使用类型参数创建子class,但 scala 给出 "error: class type required but T found"
。例如:
abstract class Base {def name:String}
class Derived extends Base {def name:String = "Derived"}
class Main[T <: Base]
{
class SubBase extends T {}; // <--- error: class type required but T found
val x:SubBase;
println(x.name)
}
val m:Main[Derived]
我想要这种方式而不是正常的继承,因为在实际代码中我有惰性变量,在 Base
中声明并在 Derived
中定义,这些变量应该在 Main
中执行计算class
我该怎么做?提前致谢
你可以使用自类型来实现类似的效果:
abstract class Base {def name:String}
class Derived extends Base {def name:String = "Derived"}
class Main[T <: Base]
{
trait SubBase { this: T => };
val x:SubBase;
println(x.name) // <--- error: value name is not a member of x
}
val m:Main[Derived]
但是,这只会让您访问 class 中 T
的成员。因此,您还可以 SubBase
extend Base
:
abstract class Base {def name:String}
class Derived extends Base {def name:String = "Derived"}
class Main[T <: Base]
{
trait SubBase extends Base { this: T => }
val x:SubBase;
println(x.name)
}
val m:Main[Derived]
这将编译,但没有用,因为 SubBase
也是 T
这一事实对 SubBase
.