scala – 如何说类型参数必须有一个替代超类型的超类型?
发布时间:2020-12-16 18:55:20 所属栏目:安全 来源:网络整理
导读:可以说类型参数T必须具有特定的超类型S_1: class Test[T : S_1] 有没有办法说,一个类型参数必须至少有一个超类型的多个超类型备选方案? 像(伪代码)的东西: class Test[T : S_1 || S_2] 或者:这是不可能的,因为这样的结构毫无意义,并且会在代码中暗示设计
可以说类型参数T必须具有特定的超类型S_1:
class Test[T <: S_1] 有没有办法说,一个类型参数必须至少有一个超类型的多个超类型备选方案? class Test[T <: S_1 || S_2] 或者:这是不可能的,因为这样的结构毫无意义,并且会在代码中暗示设计错误? 解决方法
简答:直观的解决方案是让S_1和S_2共享一个共同的特征,代表你的类型参数T所需的一组能力.使用该特征作为T的上限.
更多可能性: >如果S_1和S_2本质上不相关,并且您对类型T的要求是它具有某些成员(S_1和S_2都恰好实现),则可以使用structural type来表示(后面的概念称为duck typing).>如果由于某种原因你真的要求T是S_1或S_2的子类,并且你不能改变这些类型,你可以使用implicits将这两种类型转换为新引入的内部类型S_1_or_2,然后你可以将它们用作你T的上限. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在bash中,文件操作符(-f)是否不区分大小写?
- erlang – 将列表列表转换为元组列表的最佳方法?
- Scala在同一行声明多个变量,第一个字符为大写
- twitter-bootstrap – Bootstrap 3 Tooltip over Glyphicon
- angularjs – 我如何使用angular渲染动态定义列表?
- WebService 基本介绍
- mysql5.7.18的安装与主从复制
- angularjs – Angular.js对象中的函数参数名称如何连接到其
- 【AC自动机】【数据结构】【树】【Aho-Corasick automation
- shell – 如何检查文件是否是二进制文件并读取所有不是的文