8

rozważyć coś takiego:Jak uzyskać klasę obiektu singleton w czasie kompilacji?

object Singleton 

val cls: Class[Singleton] = ??? 

Co mam napisać zamiast ????

Próbowałem classOf[Singleton], classOf[Singleton.type], Singleton.type, ale nic nie działało.

(wiem oczywiście o getClass, wersję runtime classOf, ale nie o to pytam.)

Odpowiedz

6

Oto rozwiązanie, ale nie całkiem ...

object Singleton 

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

Edycja: uzupełniono rozwiązanie po przeczytaniu innego pytania/odpowiedzi: Scala equivalent of Java java.lang.Class<T> Object

Uwaga 1: Usuwanie typu uniemożliwiłoby to szczególnie użyteczną, np. w dopasowywaniu wzorców. Zobacz wyżej wymienione pytanie/odpowiedź, dla dobrego wyjaśnienia:

Uwaga2: Flaga scala -explaintypes jest bardzo przydatna w zrozumieniu błędów typu.

HTH

+1

'.asInstanceOf [AnyRef]' nie wydaje się być potrzebne, aby to zadziałało. – axel22

+0

dobry punkt! zaktualizowana odpowiedź, dzięki – laher

4

Nie jesteś sam z tym problemem. Odpowiedź brzmi: Obecnie nie ma sposobu, aby uniknąć Singleton.getClass. Zobacz komentarz this, aby uzyskać więcej informacji, dlaczego classOf[Singleton] nie działa

Powiązane problemy