我的方法如下:
def loadConfiguration[T <: Product](implicit A: Configs[T]): T = {
和一个班级
trait SparkBaseRunner[T <: Product] extends App {
从SparkBaseRunner
类中调用第一个方法,如
ConfigurationUtils.loadConfiguration[T]
编译错误是:
T is not a class
如何解决此泛型相关问题?
答案 0 :(得分: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
并在子类中手动提供