斯卡拉T不是一个类

问题描述 投票:1回答: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

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

scala generics classtag
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.