Dato una variabile con tipo Graphics
, come si trasmette a Graphics2D
in Scala?Come faccio a trasmettere una variabile in Scala?
risposta
La tecnica preferita consiste nell'utilizzare la corrispondenza del modello. Questo consente di gestire con garbo il caso che il valore in questione è non del tipo dato:
g match {
case g2: Graphics2D => g2
case _ => throw new ClassCastException
}
Questo blocco replica la semantica del metodo asInstanceOf[Graphics2D]
, ma con una maggiore flessibilità. Ad esempio, è possibile fornire diversi rami per vari tipi, eseguendo efficacemente più cast condizionali allo stesso tempo. Infine, non è necessario inviare un'eccezione nell'area catch-all, è inoltre possibile restituire null
(o preferibilmente, None
) oppure è possibile immettere un ramo fallback che funziona senza Graphics2D
.
In breve, questa è davvero la strada da percorrere. È un po 'più sintatticamente ingombrante di asInstanceOf
, ma la maggiore flessibilità è quasi sempre la pena.
g.asInstanceOf[Graphics2D];
Una volta che mi sono abituato a Scala, ho imparato a non usare 'asInstanceOf', poiché sconfigge lo scopo di avere un sistema di tipo statico e si sente schifo. –
Sfortunatamente, questa è un'operazione comune quando si usa Swing. Per le operazioni di verniciatura personalizzate, è necessario eseguire l'override del metodo "public void paintComponent (Graphics g)". Il parametro Graphics è in realtà un'istanza di Graphics2D, ma è necessario un cast. La versione di corrispondenza del pattern è probabilmente più verbosa di quanto garantito. Ricorda: evita sediziosamente l'iperverbosità e la prolissità! – hohonuuli
@hohonuuli Penso che il cast stia bene in quel caso specifico, ma se usi i componenti 'scala-swing', il parametro paintComponent è già Graphics2D quindi non è richiesta alcuna cast –
- 1. Come faccio a trasmettere Scope_Identity() a Int?
- 2. Come faccio a trasmettere da System.Web.HttpPostedFileBase a System.Web.HttpPostedFile?
- 3. Come faccio a verificare se una variabile è stata inizializzata
- 4. Come faccio a trasmettere video dalla mia webcam con Html5?
- 5. Conteggio in Erlang (? Come faccio a incrementare una variabile)
- 6. come faccio ad incrementare una variabile intera che ho passato in una funzione in Scala?
- 7. variabile in CDATA a Scala
- 8. Come faccio a trasmettere dati ai browser con Hapi?
- 9. Python 3 Come faccio a 'dichiarare' una variabile `byte` vuota
- 10. Come faccio a disinserire una variabile nella conchiglia?
- 11. Come faccio a "leggere" una variabile su un ciclo while
- 12. Come faccio a trasmettere un double a un int in Java?
- 13. Come assegnare una scala di colori a una variabile in un grafico a dispersione 3D?
- 14. Come faccio a rendere generiche le funzioni lambda in Scala?
- 15. Come faccio a trasmettere un valore int a un parametro di tipo generico equivalente come char?
- 16. Come sovrascrivere una variabile mutabile in Tratto in scala?
- 17. Modo corretto per trasmettere un oggetto JSON in una variabile dattiloscritta utilizzando una classe?
- 18. Interpolazione stringa in Scala 2.10 - Come interpolare una variabile String?
- 19. Come passare una o nessuna variabile arg in scala?
- 20. In PowerShell, come faccio a impostare una variabile di ambiente fornendo il nome come $ var?
- 21. Come dichiarare una variabile denominata 'tipo' in Play/Scala?
- 22. Come faccio a uscire da una variabile di campo in un comando awk in un alias?
- 23. Perché trasmettere a un'interfaccia?
- 24. È possibile definire una variabile locale del costruttore in Scala?
- 25. Come "trasmettere" una funzione a due argomenti in una funzione a un argomento?
- 26. Come usare MD5 in javascript per trasmettere una password
- 27. Come faccio a verificare se una variabile implementa un'interfaccia in clojure?
- 28. Come faccio a sapere quale tipo di valore si trova in una variabile Perl?
- 29. Come faccio a verificare se una variabile di ambiente è impostata in cmake
- 30. PHP: Come faccio a leggere un file .txt dal server FTP in una variabile?
+1 perché è interessante, ma un po 'troppo per questo scenario, non è vero? –
e se io già modellato, ma ha perso il riferimento al valore castato:
base match { case MyConcrete(value) => base.asInstanceOf[MyConcrete].something(value) }
, c'è un modo per ottenere "base" castato su MyConcrete anche se si desidera estrarre "valore" sfruttando la chiamata "non valida" eseguita da "caso MyConcrete (valore)"? – ithkuilProva questo: 'base match {case base @ MyConcrete (valore) => base.something (valore)}' Ovviamente, l'ombreggiamento 'base' è facoltativo.Potresti usare semplicemente un nome di variabile diverso. –