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

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

object Singleton

val cls: Class[Singleton] = ???

Что я должен написать вместо ????

Я пытался classOf[Singleton], classOf[Singleton.type], Singleton.type, ноничего не помогло.

(я, конечно, знаю о getClass, версии classOf во время выполнения, но я не об этом спрашиваю.)

Ответы [ 2 ]

6 голосов
/ 25 мая 2011

Вот решение, но оно не красивое ...

object Singleton

val cls : Class[Singleton] = Singleton.getClass.asInstanceOf[Class[Singleton]]

Редактировать: завершить решение после прочтения другого вопроса / ответа: Scala-эквивалент Java java.lang.Class Объект

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

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

НТН

4 голосов
/ 25 мая 2011

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

...