【发布时间】:2020-09-24 04:20:58
【问题描述】:
我有一个这样的主要课程:
class Test {
def exe(first:String, second:String, task:String):String = {
task match {
case "A" => {
val obj = new A(first)
obj.defineSecond(second)
}
case "B" => {
val obj = new B(first)
obj.defineSecond(second)
}
case "C" => {
val obj = new C(first)
obj.defineSecond(second)
}
....so many cases
}
}
}
我没有在每次添加新类时都在我的测试类中编写案例,而是尝试在 scala 中使用反射的概念。 以下是我尝试的:
val m = ru.runtimeMirror(getClass.getClassLoader)
val classTest = ru.typeOf[Test].typeSymbol.asClass
val cm = m.reflectClass(classTest)
但是由于“class Test是内部类,在InstaneMirror上使用reflectClass来获取它的classMirror”.
任何人都知道如何避免在每次创建新类时将案例添加到我的主类中,而是我可以编写我的主类以使其适用于每个案例。
【问题讨论】:
-
老实说,我只想保持比赛。或者您可以使用Enumeratum 来定义您的所有任务,这样您就可以轻松地构建一个从名称到任务的地图。
-
运行时反射很少是合适的解决方案
标签: scala reflection scala-reflect