2012-03-09 15 views
46

Zastanawiam się, jak uzyskać obiekt klasy dla typu obiektu w Scala. Ok, to usta pełne z powodu podwójnego znaczenia dla przedmiotu. Oto przykład, który się nie powiedzie:Jak uzyskać classOf dla obiektu typu scala:

object Main 
{ 
    private [this] val TAG = classOf [Main].getName; 
} // Main 

Jeśli klasa Main była najlepsza, działa idealnie. Jakieś pomysły?

Odpowiedz

67
scala> Main.getClass 
res1: java.lang.Class[_] = class Main$ 
+1

Tak. Rozumiem, teraz wszystko staje się jasne. 'obiekt ma dokładnie jedną instancję i dlatego wywołujesz' getClass'. Dzięki. – Martin

+4

@Martin Właściwie to powiedziałbym, że to niepoprawne. 'object's nie _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ one są jedynymi wystąpieniami klas (generowanych przez kompilator) i dlatego możesz wywołać 'getClass'. –

+3

Czy jest to sposób na zrobienie tego jako czas kompilacji Stały, aby mógł być użyty dla atrybutu adnotacji Java typu Class? –

6

Ponieważ Main jest obiektem, na przykład do pracy, po prostu zamień linię przypisania;

private [this] val TAG = this.getClass.getName; 
14

Powodem classOf[Main] nie działa dlatego Main nie jest typ.

Klasy i cechy definiują typy, obiekty nie.