如何检查scala类是否可以从java类中赋值



我希望能够检查某个Scala类是否可以从某个Java类中赋值。如前所述,并不总是可以执行D.class.isAssignableFrom(A.class).

基本上我需要的是这样的东西:

def isAssignableFrom(scalaClass: Class[_], javaClass: Class[T]): boolean = {
    // magic
}

我测试过:

def m[T: ru.TypeTag, S: ru.TypeTag](x: T, y: S): Boolean = {
    val leftTag = ru.typeTag[T]
    val rightTag = ru.typeTag[S]
    leftTag.tpe <:< rightTag.tpe
}

如以上链接中所述。但它抱怨Java类没有TypeTag:

error: No TypeTag available for Class[T]

我还不太熟悉Scala,所以也许有一种非常简单的方法可以做到这一点?

我设法解决了这个问题:

def isAssignableFrom(scalaClass: Class[_], javaClass: Class[T]): Boolean = {
    val javaClassType: ru.Type = getType(javaClass)
    val scalaClassType: ru.Type = getType(scalaClass)
    scalaClassType.<:<(javaClassType)
}
def getType[T](clazz: Class[T]): ru.Type = {
    val runtimeMirror = ru.runtimeMirror(clazz.getClassLoader)
    runtimeMirror.classSymbol(clazz).toType
}

相关内容

  • 没有找到相关文章