首页 > 解决方案 > 动态实例化类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>()

有人对为什么以及如何解决它有任何想法吗?

标签: scalareflection

解决方案


MonsterCard 是 a trait,而不是 aclass并且不能被实例化。您将需要添加一些过滤,以便您只获得具有适当构造函数的具体类的类型。


推荐阅读