gpt4 book ai didi

scala - 如何匹配 "boolean"类型和 "Boolean"类型的类?

转载 作者:行者123 更新时间:2023-12-05 00:02:38 25 4
gpt4 key购买 nike

考虑以下代码:

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"))

最佳答案

当 Java 反射想要表示原始返回类型时,它使用 Class与包装类不同的实例。所以在 Java 中,一个 boolean返回类型由 java.lang.Boolean.TYPE 表示(在 Java 中也可以作为 boolean.class 访问,在 Scala 中作为 classOf[Boolean] 访问)。

所以你要

scala> U.getClass.getMethods.find(_.getName == "foo").get.getReturnType ==
java.lang.Boolean.TYPE
res7: Boolean = true

编辑:我想与 classOf[Boolean] 相比将是一个较少 JVM 特定的解决方案。

关于scala - 如何匹配 "boolean"类型和 "Boolean"类型的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7696930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com