首页 > 解决方案 > 将 isInstanceOf 类设置为变量

问题描述

鉴于扩展 MyAbstractClass 的 MyClass1 和 MyClass2,我需要实现一个逻辑,其中使用的类型isInstanceOf是可变的(见myFunction下文)。这可行吗?

abstract class MyAbstractClass {
  val a: Int
  val b: Int
}

class MyClass1 extends MyAbstractClass {
  val c: String
}

class MyClass2 extends MyAbstractClass {
  val d: Int
}



object HelloScala extends App {


    def myFunction(indicator: Int) = {

      val MyClass = if (indicator  == 1) MyClass1 else MyClass2

      if (someObject.isInstanceOf[MyClass])
          // do something
      else
          // do something else

    }

}

标签: scala

解决方案


我正在寻找在isInstanceOf括号之间的值中使用变量,例如我的问题中的变量MyClass是isInstanceOf使用的变量。我的问题中的代码无法编译,我正在寻找修复它。

您不能从字面上做到这一点,但您可以使用ClassScala 提供的实际值classOf及其isInstance方法来实现:

val myClass = if (indicator == 1) classOf[MyClass1] else classOf[MyClass2]
if (myClass.isInstance(someObject)) ...

推荐阅读