scala T 不是一个类

标签 scala generics classtag

我有一个方法,例如:

  def loadConfiguration[T <: Product](implicit A: Configs[T]): T = {

和一个类

trait SparkBaseRunner[T <: Product] extends App {

当从 SparkBaseRunner 类中调用第一个方法时,例如

ConfigurationUtils.loadConfiguration[T]

编译错误是:

T is not a class

我该如何解决这个与泛型相关的问题?

最佳答案

您还需要 implicit A: Configs[T] “当从 SparkBaseRunner 类中调用第一个方法时”可用,但您不可用。该错误来自该库尝试查找错误的方式。

最简单的方法是使其成为构造函数参数,这需要从特征更改为抽象类:

abstract class SparkBaseRunner[T <: Product](implicit A: Configs[T]) extends App {

// in extending class (Bar is a case class or 
// some other type for which an implicit Configs[Bar] exists)
class Foo extends SparkBaseRunner[Bar] { ... }

如果SparkBaseRunner需要是一个特征,您可以将隐式参数添加到所有需要它的方法中,或者将其设为抽象 val并在子类中手动提供

关于scala T 不是一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47891214/

相关文章:

java - 检查通用类型

scala - 传递具有任何案例类返回类型的函数作为参数

scala - 在不使用 Try/Catch block 的情况下如何编写此代码?

java - 如何用JGit遍历Git仓库并画图

ios - 类型 '[T]'(数组类型)不符合协议(protocol)

scala - 读取 trait 中的类型参数 Class Type

algorithm - 具有大量集合的优化算法(以功能方式)

scala - Spark 2.3 (Scala) - 将时间戳列从 UTC 转换为另一列中指定的时区

java - 在实例化抽象类时,我的 OOP 设计是否存在缺陷?