Wenn ich eine Instanz eines Objekts habe, gibt es eine Möglichkeit zu überprüfen, ob ich ein Singleton-Objekt anstelle einer Instanz einer Klasse habe? Gibt es eine Methode kann dies tun? Kann eine Reflexions-API sein? Ich weiß, dass ein Unterschied ist, dass der Klassenname eines Singleton-Objekts mit einem $
endet, aber das ist kein strikter Weg.In scala, gibt es eine Möglichkeit zu überprüfen, ob eine Instanz ein Singleton-Objekt ist oder nicht?
10
A
Antwort
22
Yep, mit der wenig dokumentierten scala.Singleton
Typ:
def isSingleton[A](a: A)(implicit ev: A <:< Singleton = null) =
Option(ev).isDefined
Und dann:
scala> val X = new Foo(10)
X: Foo = [email protected]
scala> object Y extends Foo(11)
defined object Y
scala> isSingleton(X)
res0: Boolean = false
scala> isSingleton(Y)
res1: Boolean = true
Meine isSingleton
Methode ist nur eine Demonstration, die eine Laufzeit boolean Wert liefert, die Sie, ob oder nicht erzählt Ein Ausdruck wird statisch als Singletontyp typisiert, aber Sie können auch Singleton
als Beweis zur Kompilierzeit verwenden, dass ein Typ ein Singletontyp ist.
0
Hier ist, was ich die beste Lösung für dieses Problem gefunden:
import scala.reflect.runtime.currentMirror
def isSingleton(value: Any) = currentMirror.reflect(value).symbol.isModuleClass
Base auf How to determine if `this` is an instance of a class or an object?
Verwandte Themen
- 1. Gibt es eine Möglichkeit zu überprüfen, ob oauth Token abgelaufen ist oder nicht?
- 2. Gibt es eine Möglichkeit zu überprüfen, ob ein DOM-Element dynamisch erstellt wird oder nicht?
- 3. Gibt es eine Möglichkeit zu überprüfen, ob eine native Javascript-Funktion ein Affe-Patch ist?
- 4. Gibt es eine Möglichkeit zu überprüfen, ob eine Bean im Spring-Kontext definiert ist?
- 5. Gibt es eine einfache Möglichkeit zu überprüfen, ob ein eingehender Anrufer ein Kontakt in Android ist?
- 6. In groovy, gibt es eine Möglichkeit zu überprüfen, ob ein Objekt eine bestimmte Methode hat?
- 7. Gibt es eine Möglichkeit zu überprüfen, ob eine Abrechnungs/Bestellposition tatsächlich in der Software vorhanden ist?
- 8. Gibt es eine Möglichkeit zu überprüfen, ob Text in Cyrilics oder Latein mit C# ist?
- 9. Gibt es eine Möglichkeit zu überprüfen, ob ein Build in Adhoc, Release, Verteilung programmgesteuert ist?
- 10. Gibt es eine Möglichkeit zu überprüfen, ob ein Typ in Julia's Typsystem iterierbar ist?
- 11. Gibt es beim Debuggen eine Möglichkeit festzustellen, ob ein Objekt eine andere Instanz ist?
- 12. Gibt es eine Möglichkeit zu überprüfen, ob ein Windows-Registrierungsschlüssel flüchtig ist (REG_OPTION_VOLATILE)?
- 13. Gibt es eine Möglichkeit zu bestimmen, ob eine Funktion in Dokument bereit ausgeführt wird oder nicht?
- 14. Gibt es eine schnellere/bessere Möglichkeit zu überprüfen, ob eine URL erreichbar ist als cURL?
- 15. Gibt es eine Möglichkeit zu überprüfen, ob es symbolische Links gibt, die auf ein Verzeichnis verweisen?
- 16. Hibernate/C3P0: Gibt es eine Möglichkeit zu überprüfen, ob die Verbindung in Echtzeit unterbrochen ist?
- 17. Gibt es eine Möglichkeit herauszufinden, ob ein Thread blockiert ist?
- 18. Gibt es eine Möglichkeit zu überprüfen, ob ein Host aktiv ist?
- 19. Gibt es eine Möglichkeit zu überprüfen, ob ein (Datei-) Handle gültig ist?
- 20. Überprüfen Sie, ob ein Objekt eine Instanz einer Klasse ist (aber nicht eine Instanz seiner Unterklasse)
- 21. Gibt es eine Möglichkeit zu überprüfen, ob eine Combobox oder ein Listboxitem auf dem Bildschirm sichtbar ist?
- 22. Gibt es in Android eine Möglichkeit zu überprüfen, ob ein bestimmter Dienst existiert?
- 23. Gibt es eine elegante Möglichkeit zu testen, ob eine Instanzmethode ein Alias für eine andere ist?
- 24. Gibt es eine Möglichkeit zu überprüfen, ob eine VBScript-Funktion definiert ist?
- 25. Gibt es eine Möglichkeit zu überprüfen, ob der Benutzer momentan nicht aktiv ist?
- 26. Gibt es eine Möglichkeit zu testen, ob eine Zeichenfolge ein MD5-Hash ist?
- 27. Gibt es eine Möglichkeit zu testen, ob ein Edelstein funktioniert? Oder eine Möglichkeit zu sehen, welche Funktionen es hat
- 28. Gibt es eine Möglichkeit zu überprüfen, ob die Funktionsausgabe einer Variablen in Python zugewiesen ist?
- 29. Gibt es eine Möglichkeit, ein IPhone zu "pingen", um zu sehen, ob es eingeschaltet ist?
- 30. Gibt es eine einfache Methode, um zu überprüfen, ob eine Ruby IO-Instanz bei read() blockiert?
Warum nicht 'null' ev ne anstelle von' Option (ev) .isDefined'? – Clashsoft
@Clashsoft Kein besonderer Grund. Der 'Null'-Standardwert ist eine Art Hack, und da es nicht wirklich der Punkt ist, wollte ich die Dinge nur so prinzipiell wie möglich halten. –
Sind Sie sicher, dass "scala.Singleton" (noch) existiert? Es ist nicht in der '2.11' Dokumentation, und es ist auch nicht im GitHub Repo zu finden? Vielleicht könntest du einen Link hinzufügen – Clashsoft