考虑下面的代码:如何匹配“布尔”类型和“布尔”类型的类?
object U { def foo(s:String) = true }
val boolType = Class.forName("java.lang.Boolean")
val retType = U.getClass.getMethods.find(_.getName == "foo").get.getReturnType
boolType == retType // evaluates to false (*)
println (boolType) // prints "class java.lang.Boolean"
println (retType) // prints "boolean"
我想retType
以配合boolType
的行标(*)
。我如何自动将盒装类和非盒装类划分为相同的类?
[编辑:]我不认为这是最好的解决办法,但一个方法是使比较 retType.getCanonicalName == "boolean"
[EDIT2:]上下文:我写一些代码来自动调用的方法基于表单名称。代码应该从方法中提取返回类型等并返回适当的答案。作为一个例子,下面的片段被用于:
object someObject {}
val validTypes:Array[Class[_]] = Array(Class.forName("java.lang.String"),
someObject.getClass,
Class.forName("java.lang.Boolean"))
object U { def foo(s:String) = true } // can contain more methods
def getRetType(name:String) =
U.getClass.getMethods.find(_.getName == name).get.getReturnType
println ("Type is "+(if (validTypes.contains(getRetType("foo"))) "valid" else "invalid"))
有趣的问题,但在什么情况下你需要它?你想在编译时或运行时检查它吗? – paradigmatic
@paradigmatic我认为检查将在运行时完成。 – Jus12