Как сделать instanceOf для переменной класса (не типа класса) в Scala - PullRequest
1 голос
/ 28 сентября 2019

Я хочу использовать isInstanceOf для определения типа переменной, однако isInstanceOf[T] требует T, а T должен быть классом, определенным во время компиляции.Я надеюсь, что смогу сделать его переменной.

См. Пример кода:

class A{ ... }
class B{ ... }

val class_map = Map( classOf[A] -> 1, classOf[B] -> 2 )
val a = new A()
class_map.keys foreach { i =>
   if (a.isInstanceOf[ i ])  // how to make this statement work?
     println(class_map[i])
}

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Вы можете использовать isInstance метод объекта Class:

val matchingValues = class_map.collect {
  case (clazz, value) if clazz.isInstance(a) => value
}

matchingValues foreach println
0 голосов
/ 29 сентября 2019

На вашем месте я бы выбрал другой подход:

sealed trait Arg
class A{ ... } extends Arg
class B{ ... } extends Arg

val class_map: Arg => Int = {
  case A => 1
  case B => 2
}

val a = new A()
println(class_map(a)) // will print 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...