generics - Scala:抽象类型可以是其他类型的子类型吗?

标签 generics scala

鉴于以下Scala定义

abstract class C {
    type T1 <: { def m() : Int }
    type T2 <: { def n() : Int }
}

有没有办法在C中定义被约束为T1和T2的子类型的第三种类型?例如。
    type T3 <: T1 & T2 // does not compile

在我看来,(按部分原因)无法按书面要求进行工作的部分原因是,我无法确定这不会导致非法约束(例如,从两个类继承)。因此,一个相关的问题是我是否可以限制T1和T2以便合法,例如要求它们都是特质。

最佳答案

这会满足您的需求吗?

type T3 <: T1 with T2

这并不需要T1T2都是特征-例如,您可以使用一个特征和一个类来实现有效的实现(哪个是哪个都无所谓)。

如果您尝试定义CT1都是类的具体T2子类型,则它将不会编译,因此我不必担心在约束中强制执行此操作。

关于generics - Scala:抽象类型可以是其他类型的子类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7645665/

相关文章:

scala - 从 sbt 插件登录

multithreading - 可以从Scala的子线程中更改局部变量

scala - 在集群节点上运行的 Akka Streams

Java 通用列表模板

java - 接口(interface)作为方法参数

swift - 如何避免子类中默认初始化参数冗余?

swift - 在 Swift 字典中存储 Encodable

scala - Spark 中的 RDD 持久化

scala - 在 Scala 中使用字符串识别对象字段

generics - 如何将某种通用闭包传递给函数以生成特定值