gpt4 book ai didi

scala - 如何为不同的 X 模式匹配 Class[X]?

转载 作者:行者123 更新时间:2023-12-04 05:26:44 26 4
gpt4 key购买 nike

我想检查一个方法的参数类型,但我不知道这样做的最佳方法。看我的代码:

class X {
def x(a: Int, b: String) {}
}

val methods = classOf[X].getDeclaredMethods
methods map { m =>
m.getParameterTypes.toList map { t =>
println(t.getName)
// I don't know how to write the following
if ( the type of t is Int) { do something}
else if( the type of t is String ) { do something}
else { }
}
}

请注意代码中的注释。我不知道如何以 Scala 方式检查类型。

我试过了:
t match {
case _:String => println("### is a string")
case _:Int => println("### is an int")
case _ => println("### ?")
}

但是不能编译。

我可以使用 java-way 来检查:
if (t.isAssignableFrom(classOf[String])) // do something
else if(t.isAssignableFrom(classOf[Int])) // do something
else {}

看来我们应该在scala中使用它,对吗?

更新:

如果我想使用 match ,我应该这样写:
t match {
case i if i.isAssignableFrom(classOf[Int]) => println("### is an Int")
case s if s.isAssignableFrom(classOf[String]) => println("### is a String")
case _ => println("###?")
}

这是最好的答案吗?

最佳答案

我可以通过将案例定义为常量来使其与 t 作为类型一起使用。它不会使用类文字作为 case 表达式进行编译。尝试:

val S = classOf[String]
val I = classOf[Int]
t match {
case S => println("### is a string")
case I => println("### is an int")
case _ => println("### ?")
}

关于scala - 如何为不同的 X 模式匹配 Class[X]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5191481/

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