考慮下面的代碼:如何匹配「布爾」類型和「布爾」類型的類?
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