Home > Enterprise >  Scala - Error type mismatch found : Any required: Array[Any]
Scala - Error type mismatch found : Any required: Array[Any]

Time:09-17

I am getting an below error while executing program....Does anyone help me with that which change I need to do it with recursion as I am new in scala?

type mismatch;
 found   : Any
 required: Array[Any]
      array11(arr(acc),0)

Below is my code

object arr11 {

  def main(args: Array[String]): Unit = {
    array11(Array(Array(1, 2, 11),0),0)
  }

  def array11(arr:Array[Any],acc:Int):Unit = {

    if(arr(acc).isInstanceOf[Array[Any]])
    {
      array11(arr(acc),0)
    }


  }

CodePudding user response:

take a look at function array11:

def array11(arr: Array[Any], acc: Int):Unit = {
  if(arr(acc).isInstanceOf[Array[Any]]) {
    array11(arr(acc),0)
  }
}

array11 takes two arguments, first - arr should have type Array[Any], but in line:

array11(arr(acc), 0)

arr(acc) will have type Any (because arr is Array of Any) and you are trying to pass an object of Any type as Array[Any] and the compiler shows you the error: type mismatch. To make your code correct for compiler you should make cast arr(acc) to Array[Any] type, for example using asInstanceOf:

def array11(arr: Array[Any], acc: Int): Unit = {
  if(arr(acc).isInstanceOf[Array[Any]]) {
    array11(arr(acc).asInstanceOf[Array[Any]], 0)
  }
}

But your code has a very low type-safety in this case, you should get rid of using Any type in signatures as possible. Also using asInstanceOf - is a bad practice for the same reasons. I would advise you to refactor your array11 function to make it more type-safe.

CodePudding user response:

Even if you do if (x.isInstaceOf[X]), the compiler still does not assume the type of x to be X, it is still the same as it was before the if. This is different in some languages, like Kotlin. In Scala if you want to do a thing like this, you use the pattern matching:

  def array11(arr:Array[Any],acc:Int):Unit = {
    arr(acc) match {
      case aa: Array[Any] =>
        array11(aa,0)
      case _ =>
    }

  }
  • Related