Как я могу утверждать, расширяет ли класс AnyVal с помощью ArchUnit
Я хочу написать арку тест Arch, чтобы убедиться, что класс расширяетсяAnyVal
тип.
val rule = classes().should().beAssignableTo(classOf[AnyVal])
val importedClasses = new ClassFileImporter().importPackages("a.b.c")
isAnyVal.check(importedClasses) // Always returns true
Приведенный выше код на самом деле ничего не улавливает и передает классы, которые не расширяются. AnyVal
также.
1 ответ
classOf[AnyVal]
является java.lang.Object
, поэтому вы просто просите, чтобы все классы расширили Object
, что они и делают.
Из руководства пользователя ArchUnit:
Это делается путем анализа заданного байт-кода Java и импорта всех классов в структуру кода Java.
Я надеялся, что ты получишь Class
и т.д. и могли бы перейти оттуда в отражение Scala, даже если вы не получите хороший DSL, но вместо этого они используют свой собственный API.
Итак, чтобы ответить на вопросы, относящиеся к Scala, нужно проанализировать @ScalaSignature
аннотации, и это, вероятно, потребует от разработчиков очень больших усилий (не говоря уже об обслуживании или зависимости от конкретной версии Scala, по крайней мере, до Scala 3).