scala T 不是 class

scala T is not a class

我有这样的方法:

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

和一个class

trait SparkBaseRunner[T <: Product] extends App {

SparkBaseRunner class 中调用第一个方法时

ConfigurationUtils.loadConfiguration[T]

编译错误为:

T is not a class

我该怎么做才能解决这个与泛型相关的问题?

您还需要 implicit A: Configs[T] 可用 "when calling the first method from within the SparkBaseRunner class",但您没有。错误来自这个库试图找到一个的方式。

简单的方法是让它成为构造函数的参数,这需要从特征变为抽象class:

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需要作为trait,你可以将隐式参数添加到所有需要它的方法中,或者将其抽象为val并在sub[=21=中手动提供]es