Scala 斯卡拉:“我的朋友。”;类类型必需,但找到了{trait}的{trait};从mixin类型别名继承时

Scala 斯卡拉:“我的朋友。”;类类型必需,但找到了{trait}的{trait};从mixin类型别名继承时,scala,inheritance,mixins,Scala,Inheritance,Mixins,我定义了一个非常常见的类型别名: package object policy { type KeyGen[K] = Function0[K] with Serializable } 但当我试图从中继承时: import java.security.Key case class FixedKeyGen(key: Key) extends KeyGen[Key] { override def apply(): Key = key } maven编译器给了我以下错误: [ERROR]

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

package object policy {

  type KeyGen[K] = Function0[K] with Serializable
}
但当我试图从中继承时:

import java.security.Key
case class FixedKeyGen(key: Key) extends KeyGen[Key] {

  override def apply(): Key = key
}
maven编译器给了我以下错误:

[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] {

这是怎么回事?

我认为不允许您像那样直接扩展复合类型。也就是说,可序列化的
Function0[K]本身不是类类型。它是一个没有构造函数的复合类型,这是关键。在没有构造函数的情况下扩展某些东西是没有意义的。类型别名与此类似(请注意类型周围的括号):

我们得到了相同的错误:

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

谢谢!对我来说,这似乎是一个缺失的功能
<console>:20: error: class type required but () => java.security.Key with Serializable found
       case class FixedKeyGen(key: Key) extends (Function0[Key] with Serializable) {
trait KeyGen[K] extends Function0[K] with Serializable

case class FixedKeyGen(key: Key) extends KeyGen[Key] {
    override def apply(): Key = key
}