В Java есть класс Class<T>
, который представляет, ну, в общем, классы. Это полезно, когда вам нужно динамически проверять некоторые классы во время выполнения, например, если какой-то интерфейс может принимать различное количество аргументов и ожидает, что аргументы имеют указанные c типы: тогда интерфейс может вернуть список Class
объекты для уточнения его требований.
По-видимому, он также доступен в Scala, но только как псевдоним для класса Java). Можно ли использовать это в Scala (или вообще в классе Class
, в чистом коде Scala), или есть более идиоматический c способ добиться того же самого?
Более подробно, вот о чем я думаю:
trait BuiltInFunction[Node] {
def symbol: String
def arity: Int
def argumentTypes: List[Class[Node]]
def apply(args: List[Node]): Node
}
BuiltInFunction
представляет функции, каждая из которых может иметь разное количество аргументов и ожидать, что аргументы будут разными подтипами Node
, Если система встречает функцию, она удостоверится, что она применяется к аргументам соответствующих типов (как определено argumentTypes
), вызвав метод apply
с этими аргументами.
Использует ли Class
правильный способ сделать это в Scala?