2015-01-08 4 views
2

Есть ли способ узнать, был ли класс реализован в Scala?Можно ли определить, реализуется ли класс в Java или Scala?

Я строил систему сериализации для JVM, которая активно занимается отражением. Java-классы уже обработаны, но метод неадекватен для классов Scala (например, в Scala List [Int] превращается в List [Object] в систему отражения Java, но эта потерянная информация восстанавливается при отражении scala). Это похоже на переход, чтобы сказать, следует ли мне выполнять специфичную для scala обработку класса.

+1

Для 2,10 простой вариант: проверка 'ScalaObject' (http://www.scala-lang.org/api/2.10.4/index.html# scala.ScalaObject). –

+0

... говорит, что он устарел :( – user48956

+0

Да, он был удален в 2.11, но он присутствовал в серии 2.10.x. –

ответ

4
def isJavaClass(cls: Class[_]): Boolean = { 
    import scala.reflect.runtime.{universe=>ru} 
    val sym = ru.runtimeMirror(cls.getClassLoader).classSymbol(cls) 
    sym.isJava 
} 

тест РЕПЛ:

scala> isJavaClass(classOf[List[Any]]) 
res0: Boolean = false 

scala> isJavaClass(classOf[java.util.List[Any]]) 
res1: Boolean = true 
+0

Простой. – user48956

Смежные вопросы