scala - 动态实例化类scala
问题描述
我正在编写一个程序,作为要求需要获取一个包中的所有类,并且需要返回它们的对象。
我有这个代码:
package object cards {
private val reflections: Reflections = new Reflections(
new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage("me.mysterymystery.duelingfactions.apiv2.guiindependant.card.cards"))
.setScanners(new SubTypesScanner())
)
def getAllCards: Seq[Card] = reflections.getSubTypesOf(classOf[Card]).asScala.map(_.newInstance()).toSeq
...
}
卡类是:
trait Card {}
trait MonsterCard extends Card {}
然后所有卡片都从这个特征扩展,例如:
class ExampleCard extends MonsterCard
他们没有构造函数。所有卡都在同一个包中。
但是得到java.lang.NoSuchMethodException: me.mysterymystery.duelingfactions.apiv2.guiindependant.card.MonsterCard.<init>()
有人对为什么以及如何解决它有任何想法吗?
解决方案
MonsterCard 是 a trait
,而不是 aclass
并且不能被实例化。您将需要添加一些过滤,以便您只获得具有适当构造函数的具体类的类型。
推荐阅读
- kotlin - Kotlin:当谓词满足时停止迭代的函数
- laravel-migrations - 在 laravel 迁移中使用 UUID 作为默认值
- javascript - Highcharts 将变量传递给工具提示
- javascript - 如何在javascript中重新排列数组
- c++ - 连接池析构函数阻止子对象析构函数中的网络通信
- go - redigo 是否重新连接到服务器?
- windows - Windows 操作系统的电源选项或注册表中的屏幕唤醒设置?
- highcharts - 当大量 x 轴刻度时,Highcharts 仅显示特定刻度
- ads - 在网站上轮换 CPM 广告的简单算法
- powershell - 导出 Csv 帮助 PowerShell