Как получить класс объекта-одиночки во время компиляции?
Рассмотрим что-то вроде этого:
object Singleton
val cls: Class[Singleton] = ???
Что я должен написать вместо ???
?
Я старался classOf[Singleton]
, classOf[Singleton.type]
, Singleton.type
, но ничего не получалось.
(Я знаю конечно о getClass
Доделанная версия classOf
, но я не об этом.)
2 ответа
Здесь решение, но это не красиво...
object Singleton
val cls : Class[Singleton] = Singleton.getClass.asInstanceOf[Class[Singleton]]
Изменить: завершить решение после прочтения другого вопроса / ответа: Scala эквивалент Java java.lang.Class
Примечание 1: стирание типа помешало бы этому быть особенно полезным, например, при сопоставлении с образцом. См. Упомянутый выше вопрос / ответ, для хорошего объяснения
Примечание 2: scala -explaintypes
Флаг довольно удобен для понимания ошибок типов.
НТН
Вы не одиноки с этой проблемой. Ответ: в настоящее время нет способа избежать Singleton.getClass
, Смотрите этот комментарий для получения дополнительной информации, почему classOf[Singleton]
не работает