我有一个方法,例如:
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/