Ошибка при передаче аргументов в методы с использованием отражения scala - PullRequest
0 голосов
/ 09 июля 2020

Ошибка при передаче аргументов методам. У меня есть объект builddeequ_rules и вызывающие методы с использованием Scala отражения.

  def build(rules: List[Map[String, Any]]): Check = {
    for (constraint <- rules) {
     val name = constraint("name")
     val args = constraint("args")
     val hiObj = builddeequ_rules
     val mtd = hiObj.getClass.getMethod(name.toString,args.getClass)
     mtd.invoke(hiObj,args)
    }



import com.amazon.deequ.checks.{Check, CheckLevel}

object builddeequ_rules {
   var checks = Check(CheckLevel.Warning, "Data unit test")

def isComplete(args: Any)  {
   val arg = args.asInstanceOf[Map[String,Any]]
   val columnName = arg("column").toString
  checks = checks.isComplete(columnName)
 }

def isUnique(args: Any)  {
   val arg = args.asInstanceOf[Map[String,Any]]
   val columnName = arg("column").toString
  checks = checks.isUnique(columnName)
 }
def isPositive(args: Any)  {
   val arg = args.asInstanceOf[Map[String,Any]]
   val columnName = arg("column").toString
  checks = checks.isPositive(columnName)
 }

Я получаю ошибку ниже. Нужна помощь!

Ошибка: несоответствие типа; найдено: Любые требуется: Объект mtd.invoke (hiObj, args)

1 Ответ

3 голосов
/ 09 июля 2020

java.lang.Object более-менее scala.AnyRef. scala.Any - это (простое определение) надмножество объектов и примитивов. Таким образом, компилятор предупреждает вас, что вы пытаетесь передать что-то, что потенциально может быть примитивным (Any), как java.lang.Object.

На уровне байт-кода Any довольно часто будет просто Object, Конечно, но система типов Scala делает различие между вещами, которые являются «изначально» Object s, и вещами, которые могут включать автобокс, чтобы сделать их Object s, и это ошибка, которую вы видите.

Таким образом, решением здесь было бы аннотировать этот объект как AnyRef или даже лучше, как java.lang.Object, чтобы ясно показать, что вы хотите использовать его для чего-то, специфичного для Java / JVM c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...