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) 不安全的类演员 不要使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Angularjs – ng-cloak/ng-show元素闪烁
- typescript – 如何迭代Angular 2 ng内容项?
- 使用命令的结果作为bash中的参数?
- amazon-web-services – 带有Docker和EBS卷的EC2,在init期
- twitter-bootstrap – Topcoat vs Bootstrap 3在PhoneGap应
- shell脚本游戏之:剪刀石头布
- 如何设置默认vim colorscheme
- Angular 2 CLI“ng generate component”命令找不到app.mod
- 在shell shell与pymongo中的MongoDB db.eval()的性能
- 如何观察AngularJS中的路由更改?