【发布时间】:2015-01-16 00:28:49
【问题描述】:
我正在尝试测试方法的返回类型是否与提供的类型完全匹配。
不知何故,我发现了两个不相等的字符串类型。
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
更新:
我不能进入 Java 反射世界,因为这会删除像 List[Int] 这样的泛型的类型信息(变成 List[Object] 是 Java 领域,它们实际上是 List[java.lang.Integer]) .我需要我的匹配来注意 scala 类型 Universe 保留的通用参数信息。
【问题讨论】:
-
查看其他关于如何比较类型的问答。 stackoverflow.com/questions/19724752/…
-
嗯...搜索并错过了这个。谢谢。
标签: scala scala-2.10 scala-reflect