scala - Scala 泛型类型约束和特殊行为
问题描述
我有一个类,我需要一个apply[T]
方法,其中T
只允许使用Foo
or Bar
。此外,该方法需要根据它是 aFoo
还是 a来表现不同Bar
。由于类型擦除,我不能简单的制作apply[Foo]
和apply[Bar]
方法(这是我的第一次尝试)。为了解决这个问题,我尝试做这样的事情
def apply[T](ds: Dataset[T]): Dataset[T] = {
ds match {
case ds: Dataset[Foo] => ...
case ds: Dataset[Bar] => ...
case _ => ???
}
}
但这不起作用,因为T
. 此外,这甚至不会将此方法限制为只能使用 or 类型调用,当T
它不是这两种类型之一时,它只是“什么都不做”。如何使此应用方法具有这些属性?Foo
Bar
谢谢你。
解决方案
这是一个关于类型擦除的好技巧:
def apply(ds: Dataset[Foo]): Dataset[Foo] = ???
def apply(ds: Dataset[Bar])(implicit dummy: DummyImplicit): Dataset[Bar] = ???
让您拥有多个具有相同运行时签名的方法,而无需使用类型参数。
推荐阅读
- graphql - GraphIQL 设置服务器的 URL 端点
- python - Python跳过导入不可用的子模块
- autohotkey - Autohotkey:查找列表(对象)中的匹配数
- swift - 让类变量更改属性而不调用方法
- javascript - 使用 jQuery 选择正确的单选按钮
- google-chrome - 无法使用 Google Colab 上传本地文件
- python - 如何在python中组合这两个图
- flutter - 为什么 NotifyParser 的任何更改都不会使用 Provider / ChangeNotifier / Streambuilder 在 UI 中呈现,而是来自服务类
- amazon-s3 - 预签名上传时使 s3 安全
- java - 为什么 (/d+) 正则表达式只占用一位数字?