Se ho un'istanza di un oggetto, c'è un modo per verificare se ho un oggetto Singleton piuttosto che un'istanza di una classe? C'è qualche metodo può farlo? Può essere qualche API di riflessione? So che una differenza è che il nome classe di un oggetto singleton termina con uno $
, ma questo non è un modo rigoroso.In scala, c'è un modo per verificare se un'istanza è un oggetto singleton o no?
10
A
risposta
22
Sì, usando il poco documentato scala.Singleton
tipo:
def isSingleton[A](a: A)(implicit ev: A <:< Singleton = null) =
Option(ev).isDefined
E poi:
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
Il mio metodo isSingleton
è solo una dimostrazione che fornisce un valore di runtime booleano che indica se o no un'espressione è tipizzata staticamente come un tipo singleton, ma è possibile utilizzare anche Singleton
come prova al momento della compilazione che un tipo è un tipo singleton.
0
Ecco cosa ho trovato la migliore soluzione a questo problema:
import scala.reflect.runtime.currentMirror
def isSingleton(value: Any) = currentMirror.reflect(value).symbol.isModuleClass
Base sul How to determine if `this` is an instance of a class or an object?
Problemi correlati
- 1. Il modo più veloce per verificare se un oggetto esiste in Core Data o no?
- 2. Come verificare se un array multidimensionale è vuoto o no?
- 3. Come verificare una stringa se è un ASCII o no?
- 4. Verificare se IIS è installato o no?
- 5. Verificare se è un oggetto
- 6. Jasmine per verificare se un oggetto ha un certo metodo o no
- 7. Come sapere se un oggetto è autoreleased o no?
- 8. Qual è il modo migliore per verificare se un oggetto è un array o non in Javascript?
- 9. Come verificare in sicurezza se un oggetto dinamico ha o no un campo
- 10. Come verificare se un oggetto è definito?
- 11. C'è un modo per verificare se un oggetto "è un" Backbone.Model nei miei test di unità?
- 12. Il modo più veloce per verificare se esiste un oggetto
- 13. Come verificare se nginx è in esecuzione o no?
- 14. C'è un modo per determinare se un PID Linux è in pausa o no?
- 15. C'è un modo per determinare se una funzione è in esecuzione nel documento pronta o no?
- 16. C'è un modo per verificare se jqGrid ha dati o no?
- 17. Come verificare se un div esiste o no?
- 18. Come verificare se un oggetto è uno streaming in NodeJS
- 19. come verificare se UIWebView è vuoto o no
- 20. Verificare se esiste un oggetto in VBScript
- 21. In groovy, c'è un modo per verificare se un oggetto ha un determinato metodo?
- 22. È un oggetto o un'interfaccia? Devo liberarlo o no?
- 23. Come posso usare un oggetto Singleton Scala in Java?
- 24. Magento Come verificare se il carrello è vuoto o no?
- 25. KVO - Come verificare se un oggetto è un osservatore?
- 26. buon modo per verificare se l'estensione del file è di un'immagine o no
- 27. Come verificare se l'utente attualmente connesso è admin o no
- 28. Verificare se è stato definito un metodo
- 29. Come verificare se un oggetto è iterabile in Ruby?
- 30. Qual è il modo corretto per determinare se un oggetto è un oggetto simile a un byte in Python?
Perché non usare 'ev ne null' invece di' Opzione (ev) .isDefined'? – Clashsoft
@Clashsoft Nessun motivo particolare. Il valore di default 'null' è una specie di hack, e dal momento che non è proprio il punto che volevo mantenere le cose come principi altrimenti possibile. –
Inoltre, sei sicuro che 'scala.Singleton' (ancora) esiste? Non è nella documentazione '2.11', e non si trova nemmeno nel repository GitHub? Forse potresti aggiungere un link – Clashsoft