Как получить класс объекта-одиночки во время компиляции?

Рассмотрим что-то вроде этого:

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 Object

Примечание 1: стирание типа помешало бы этому быть особенно полезным, например, при сопоставлении с образцом. См. Упомянутый выше вопрос / ответ, для хорошего объяснения

Примечание 2: scala -explaintypes Флаг довольно удобен для понимания ошибок типов.

НТН

Вы не одиноки с этой проблемой. Ответ: в настоящее время нет способа избежать Singleton.getClass, Смотрите этот комментарий для получения дополнительной информации, почему classOf[Singleton] не работает

Другие вопросы по тегам