gpt4 book ai didi

scala - 检查 Scala 类是否是 T 的实例

转载 作者:行者123 更新时间:2023-12-05 00:11:02 25 4
gpt4 key购买 nike

我的应用程序处理很多第三方集成。我有一个用于第三方集成的抽象基类,它指定了一个集成类应该处理的一堆方法——然后可以扩展某些集成,使用并非所有集成都可用的附加功能。

基本上它看起来像这样:

abstract class Integration { ... }
trait SingleSignOn { ... }

class NormalIntegration extends Integration {}
class SingleSignOnIntegration extends Integration with SingleSignOn {}

我希望能够整理出所有具有特定特征的集成,这就是我认为的基本解决方案:
val allIntegrations: Seq[Integration] = ...

def integrationsWithTrait[T]: Seq[Integration] = {
allIntegrations.filter(_.isInstanceOf[T])
}

用法是:
val singleSignOnIntegrations = integrationsWithTrait[SingleSignOn]

问题是 isInstanceOf[T]总是返回 true (意味着我最终得到 singleSignOnIntegrations == allIntegrations ),而硬编码 isInstanceOf[SingleSignOn]按预期工作。

如何修复 integrationsWithTrait按我的意愿工作?

最佳答案

这将起作用:

def integrationsWithTrait[T](implicit tag: scala.reflect.ClassTag[T]): Seq[Integration] = {
allIntegrations.filter(tag.runtimeClass.isInstance)
}

Scalac 将注入(inject) ClassTag将调用此方法的每个类的实例。这将允许访问 Class运行时对象并验证该类是否是给定类/特征的实例。

我认为由于类型删除,原始代码不起作用。

关于scala - 检查 Scala 类是否是 T 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54923295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com