динамически создаваемые классы Scala - PullRequest
0 голосов
/ 05 июня 2018

Я пишу программу, и в качестве требования мне нужно получить все классы в пакете и вернуть их объекты.

У меня есть этот код:

  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 голосов
/ 05 июня 2018

MonsterCard является trait, а не class и не может быть создан.Вам нужно будет добавить некоторую фильтрацию, чтобы вы получали только типы, которые являются конкретными классами с соответствующими конструкторами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...