java - 斯卡拉 : class[T] extends T?

标签 java scala generics inheritance

问题:如何在 scala 或 Java 中实现以下模式?

trait A
case class B[Base](...) extends A with Base

这在 C++ 中是允许的:

template <class Base>
class B : public Base, public A

这就是我想要这样做的原因:

我有两个抽象语法树:ComplexFormSimpleForm

我有一个列表类型:case class L[T](list : List[T]) extends Complex Form with T

现在,L[SimpleForm] 应该用 ComplexForm 扩展 SimpleForm 但是 L[ComplexForm] 应该只 extend ComplexForm

我需要能够一次对所有 L[T] 进行模式匹配,以避免重复。

最佳答案

也许是这样的?

trait Form
trait SimpleForm extends Form
trait ComplexForm extends Form
trait ListForm[+T <: Form] extends ComplexForm {
   def l: List[T]
}


case class SimpleList(val l: List[SimpleForm]) extends SimpleForm with ListForm[SimpleForm]
case class ComplexList(val l: List[ComplexForm]) extends ListForm[ComplexForm]

你可以像这样对两者进行模式匹配:

 // ...
 case x:ListForm[Form] => doStuff(x.l)

关于java - 斯卡拉 : class[T] extends T?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35100317/

相关文章:

java - 我们可以 Runtime.getRuntime().exec ("groovy");

scala - 如何跨多个元素进行映射(例如前瞻)?

矩阵/vector 库中的java最佳实践

java - 发送电子邮件 jsp Glassfish

java - 如何在java中使用http请求发送文件?

java - 发布/订阅模型中事件回调的 Scala 初始化

scala - "list comprehension"可以被视为 "functional programming"吗?

java - Type<Type> 叫什么?

java - 为什么Boolean.class是java.lang.Class而String.class是java.lang.String?

java - 方法不适用于有关 Java 中泛型或类型删除的参数