动态实例化类scala

时间:2018-06-05 14:04:00

标签: scala reflection

我正在编写一个程序,并且需要获取包中的所有类,并且需要返回它们的对象。

我有这段代码:

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

有没有人对为什么以及如何解决这个问题有任何想法?

1 个答案:

答案 0 :(得分:0)

MonsterCard是trait,不是class,无法实例化。您需要添加一些过滤,以便只获取具有适当构造函数的具体类的类型。