1

我有这样的方法:

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

和一堂课

trait SparkBaseRunner[T <: Product] extends App {

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

ConfigurationUtils.loadConfiguration[T]

编译错误是:

T is not a class

我能做些什么来解决这个与泛型相关的问题?

4

1 回答 1

3

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

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

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并在子类中手动提供

于 2017-12-19T17:11:30.280 回答