加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala:引用嵌套类的类,它作为泛型的类型参数

发布时间:2020-12-16 18:08:07 所属栏目:安全 来源:网络整理
导读:我想实现类,它描述了设置一些选项值的操作.我想让选项的值类型取决于选项类型.我想这样做: case class SetOptionMessage[T : BaSEOptionType]( option: T value: Option[T#ValueType])abstract class BaSEOptionType { type ValueType}object SomeBooleanOp
我想实现类,它描述了设置一些选项值的操作.我想让选项的值类型取决于选项类型.我想这样做:

case class SetOptionMessage[T <: BaSEOptionType](
    option: T
    value: Option[T#ValueType]
)

abstract class BaSEOptionType {
    type ValueType
}


object SomeBooleanOption extends BaSEOptionType {
    final type ValueType = Boolean
}

但是当我尝试使用这样的类时:

val msg = SetOptionMessage(SomeBooleanOption,Some(true))

我有编译错误:

Error:(15,43) type mismatch;
found   : Some[Boolean]
required: Option[?#ValueType]
SetOptionMessage(SomeBooleanOption,Some(true))
                                      ^

我怎样才能正确引用嵌套类型?

解决方法

键入成员

case class SetOptionMessage[V,T <: BaSEOptionType{ type ValueType = V }](
  option: T,value: Option[V]
)

val msg = SetOptionMessage(SomeBooleanOption,Some(true))
// msg: SetOptionMessage[Boolean,SomeBooleanOption.type] = SetOptionMessage(SomeBooleanOption$@2e93ebe0,Some(true))

隐含证据

case class SetOptionMessage[V,T <: BaSEOptionType](
  option: T,value: Option[V])(implicit e: V =:= T#ValueType)

SetOptionMessage(SomeBooleanOption,Some(true))
// SetOptionMessage[Boolean,Some(true))

SetOptionMessage(SomeBooleanOption,None)
// SetOptionMessage[SomeBooleanOption.ValueType,None)

不同的参数组

您不能在此解决方案中使用案例类.

class SetOptionMessage[T <: BaSEOptionType](option: T)(val value: Option[T#ValueType])

val msg = new SetOptionMessage(SomeBooleanOption)(Some(true))
// SetOptionMessage[SomeBooleanOption.type] = SetOptionMessage@7f216e0c

msg.value
// Option[SomeBooleanOption.ValueType] = Some(true)

不安全的类演员

不要使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读