首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala:从mixin类型别名继承时发现“类类型必需但{trait}具有{trait}”

Scala:从mixin类型别名继承时发现“类类型必需但{trait}具有{trait}”
EN

Stack Overflow用户
提问于 2015-03-16 16:48:05
回答 1查看 634关注 0票数 2

我定义了一个非常常见的类型别名:

代码语言:javascript
复制
package object policy {

  type KeyGen[K] = Function0[K] with Serializable
}

但当我试图继承它时:

代码语言:javascript
复制
import java.security.Key
case class FixedKeyGen(key: Key) extends KeyGen[Key] {

  override def apply(): Key = key
}

maven编译器给出了以下错误:

代码语言:javascript
复制
[ERROR] /home/peng/git/datapassport/core/src/main/scala/com/schedule1/datapassport/policy/ValueMapping.scala:16: class type required but () => java.security.Key with Serializable found
[ERROR] case class FixedKeyGen(key: Key) extends KeyGen[Key] {
[ERROR]                                          ^
[ERROR] /home/peng/git/datapassport/core/src/main/scala/com/schedule1/datapassport/policy/ValueMapping.scala:16: com.schedule1.datapassport.policy.KeyGen[java.security.Key] does not have a constructor
[ERROR] case class FixedKeyGen(key: Key) extends KeyGen[Key] {

这里发生什么事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-16 17:09:52

我不认为你可以像那样直接延长复式。也就是说,Function0[K] with Serializable本身并不是一个类类型。它是一个没有构造函数的复合类型,这是关键。在没有构造函数的情况下进行扩展是没有意义的。类型别名执行类似的操作(请注意类型周围的括号):

代码语言:javascript
复制
case class FixedKeyGen(key: Key) extends (Function0[Key] with Serializable) {
    override def apply(): Key = key
}

我们得到了同样的错误:

代码语言:javascript
复制
<console>:20: error: class type required but () => java.security.Key with Serializable found
       case class FixedKeyGen(key: Key) extends (Function0[Key] with Serializable) {

这是因为Function0[Key] with Serializable不是类类型。

但是,如果去掉括号,这当然有效。没有它们,FixedKeyGen正在扩展Function0和混合Serializable。对他们来说,这是在试图扩展一种复式。

为了解决这个问题,您可能只想使用一个特性,而不是:

代码语言:javascript
复制
trait KeyGen[K] extends Function0[K] with Serializable

case class FixedKeyGen(key: Key) extends KeyGen[Key] {
    override def apply(): Key = key
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29082432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档