gpt4 book ai didi

scala - 要求类型是可实例化的,即不是特征/抽象

转载 作者:行者123 更新时间:2023-12-04 19:46:05 30 4
gpt4 key购买 nike

假设我有:

trait A

class B extends A

class C extends A

有没有办法配置类型参数:

class Foo[AType <: A with canCreateInstance]
def newAType : AType = new AType

这个想法是,Foo 只能采用实现 A 的类,如 B 或 C,但不能采用 A 本身。

最佳答案

尝试给特征一个伴生对象。伴随对象将是返回 AType 实例的对象。

对于伴随对象的使用:

trait Queue[T]{
def head:T
def tail:Queue[T]
def enqueue(x:T):Queue[T]
}

object Queue{
def apply[T](xs: T*): Queue[T] =
new QueueImpl[T](xs.toList)

private class QueueImpl[T](
private val leading:List[T],
private val trailing:List[T]=Nil
) extends Queue[T]
{
// methods in here
}
}

也许这更简单:

object A{

def aType(...):A = new B(...)

def aType(...):A = new C(...)


/* classes */

private class C(...) extends A

private class B(...) extends A{
// blah blah
}

}

关于scala - 要求类型是可实例化的,即不是特征/抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15028521/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com