我有这个方法:
private def doSomeStringProcessing[T](input: String, typeConverter: String => T): Array[T] = {
cleanTheString(input)
.split(",").map(typeConverter)
}
给出错误:
error: type mismatch;
[INFO] found : scala.collection.mutable.ArraySeq[T]
[INFO] required: Array[T]
根据一些谷歌搜索,发现帖子说要使用ClassManifest。试过这个并且它被弃用了。所以它把我指向了ClassTag。用Google搜索并找到我想要关注的资源:https://docs.scala-lang.org/overviews/reflection/typetags-manifests.html#via-the-methods-typetag-classtag-or-weaktypetag
所以我试着在下面做:
private def doSomeStringProcessing[T: TypeTag](input: String, typeConverter: String => T): Array[T] = {
cleanTheString(input)
.split(",").map(typeConverter)
}
这给出了完全相同的错误。我希望泛型能让我的代码更清晰/更容易阅读,而不是复杂,所以我不想做任何复杂的解决方案。解决这个问题的最快方法是什么?
答案 0 :(得分:1)
这适用于ClassTag(我感到困惑,因为IntelliJ导入和/或代码完成错误,所以包括下面的正确导入):
import scala.reflect.ClassTag
private def doSomeStringProcessing[T: ClassTag](input: String, typeConverter: String => T): Array[T] = {
cleanTheString(input)
.split(",").map(typeConverter)
}