Scala:具有泛型函数参数的案例类

我有以下案例课。

case class CustomAttributeInfo[T,Y](
          attribute:MyAttribute[_],fieldName:String,valueParser:T => Y){}

case类采用三个值。

最后一个参数是一个函数,它将解析任何类型的输入并返回我们希望保留的输入部分。

(想象一下,仅举一个例子,我传入一个jsonstring,转换为json对象,然后提取一个Int)。

伴随对象将提供我们可以传递给case类的一系列功能。此处显示的那个只是将输入作为字符串,然后将其作为字符串返回(最简单的示例)。

object CustomAttributeInfo {

  val simpleString = (s:String) => s
}

我按如下方式创建案例类:

CustomAttributeInfo(MyAttribute(var1,var2),name,CustomAttributeInfo.simpleString)

稍后,我将函数称为“ valueParser”

customAttributeInfo.valueParser(k)

编译错误

  

错误:(366,69)类型不匹配;    找到:k.type(具有基础类型String)    所需的:_ $ 13             case Some(info)=> Some((info.attribute,info.valueParser(k)))

(显然)我不是泛型专家。我已经阅读了一些书,但是没有看到关于这种情况的讨论。任何建议和解释都将受到欢迎

yykingmax 回答:Scala:具有泛型函数参数的案例类

您没有提供足够的信息来回答您的问题。

下面的代码编译。

如果仍有编译错误,请提供MCVE

  case class MyAttribute[_](var1: Any,var2: Any)

  case class CustomAttributeInfo[T,Y](attribute:MyAttribute[_],fieldName:String,valueParser:T => Y) {}

  object CustomAttributeInfo {

    val simpleString = (s:String) => s
  }

  val var1: Any = ???
  val var2: Any = ???
  val name: String = ???
  val customAttributeInfo = CustomAttributeInfo(MyAttribute(var1,var2),name,CustomAttributeInfo.simpleString)

  val k = "abc"
  customAttributeInfo.valueParser(k)
,

@Dmytro编译了一个简单的示例是正确的。但是,在我实际的代码库代码中,我们需要具体说明类型。

这有效:

object CustomAttributeInfo {

  type T = Any

  val simpleString = (s:T) => s.toString
}
本文链接:https://www.f2er.com/3118734.html

大家都在问