Рассмотрим следующий код:Как совместить классы типа «boolean» и «Boolean»?
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
в строке, помеченной (*)
. Как автоматически приравнивать классы классов в коробке и распакованных?
[Edit:] Я не думаю, что это лучшее решение, но один из способов является сделать сравнение 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