Я пытаюсь проверить, соответствует ли тип возвращаемого метода заданному типу.Как фильтровать методы по типу возврата с отражением scala?
Как-то я нашел два типа строк, которые не равны.
class VarAndValue {
@BeanProperty
val value = "";
}
class ScalaReflectionTest {
@Test
def myTest(): Unit = {
val type1 = universe.typeOf[String]
// Get return value of VarAndValue.getValue
val type2 = universe.typeOf[VarAndValue].
declarations.
filter { m => m.name.decoded == "getValue" && m.isMethod }.
head.
asInstanceOf[universe.MethodSymbol].
returnType
println(type1) // String
println(type2) // String
println(type1.getClass())
println(type2.getClass()) // !=type1.getClass() !!
println(type1==type2) // False
}
}
дает ...
String
String
class scala.reflect.internal.Types$TypeRef$$anon$3
class scala.reflect.internal.Types$TypeRef$$anon$6
false
Как я могу фильтровать методы класса от их типа возвращаемого значения? (Кажется очень сложно, если я могу проверить равенство возвращаемых типов).
Scala 2,10
UPDATE:
Я не могу зайти в отражательной вселенной Java, поскольку этот тип стерта информация для дженериков как List [Int] (которые становятся List [Object] является Java-земля, где они действительно List [java.lang.Integer]). Мне нужно, чтобы я совпадал с тем, чтобы обратить внимание на общую информацию о параметрах, которую сохраняет юниверс типа scala.
Смотреть другие Q & A о том, как для сравнения типов. http://stackoverflow.com/questions/19724752/how-to-compare-equity-between-scala-reflection-library-type-universe-type-and –
Хм ... искал и пропустил это. Спасибо. – user48956