PÄIVITTÄÄ: Tähän viestiin tehtiin merkittäviä päivityksiä 17. marraskuuta 2016 virheellisten lausuntojen ja esimerkkien korjaamiseksi, taustalla olevan HTML-asettelun korjaamiseksi (ei selvää lukijoille, ellet tarkastele HTML-lähdettä verkkoselaimessa) ja joidenkin oikeinkirjoitusongelmien korjaamiseksi. Jos haluat jostain syystä nähdä vanhan, väärän viestin, tutustu Wayback Machine -arkistamaan versioon.
Olen aiemmin kirjoittanut blogia Groovyn tuesta Stringin kytkemiseen. Groovy voi kytkeä päälle paljon muutakin kuin vain kirjaimellisen Merkkijono
s (ja kirjaimelliset integraalityypit, jotka Java sallii käynnistämisen), ja esitän tämän lyhyesti tässä.
Groovyn vaihtaa
lauseessa käytetään menetelmää, joka on toteutettu nimellä "isCase
"sen määrittämiseksi, onko tietty vaihtaa
vaihtoehto on vastaava. Tämä tarkoittaa, että mukautetut objektit ovat "vaihdettavissa" Groovyssä. Tämän blogiviestin yksinkertaisessa esimerkissä käytän Java-luokkia SimpleState
ja Osavaltio.java
.
Listaus 1. SimpleState.java
pakkaus pölyä.esimerkkejä; tuo staattinen java.lang.System.out; / ** * Java-luokka, jota käytetään osoittamaan "kytke steroidit päälle" Groovyssä. * Groovy-komentosarja voi {@code switch} ottaa käyttöön tämän luokan esiintymiä * implisiittisen {@code toString ()} -viestin avulla, jos {@code case} * -käskyissä käytetään {@code String} -merkkejä. vastaamaan. * / public class SimpleState {private String stateName; public SimpleState (viimeinen merkkijono newStateName) {this.stateName = newStateName; } @Override public String toString () {return this.stateName; }}
Yllä olevat Java-luokat Merkkijono
esitys voidaan kytkeä päälle Groovy-komentosarjassa, kuten seuraavassa koodiluettelossa osoitetaan switchOnSimpleState.groovy
:
Listaus 2. switchOnSimpleState.groovy
#! / usr / bin / env groovy import dustin.examples.SimpleState SimpleState state = new SimpleState ("Colorado") print "$ {state.stateName} -tilan motto on" "switch (osavaltio) {tapaus" Alabama ": tulosta" Audemus jura nostra defere "-taukotapaus" Alaska ": tulosta" pohjoisesta tulevaisuuteen "-taustakotelo" Arizona ": tulosta" Ditat Deus "-taustakotelo" Arkansas ": tulosta" Regnat populus "-taustakoko" Kalifornia ": tulosta "Eureka" -katkokotelo "Colorado": tulosta "tyhjä sininumero" rikkoutumistapa "Connecticut": tulosta "Qui transtulit sustinet" -katkos oletus: tulosta "<>"} println "'"
Kun yllä oleva Groovy-komentosarja suoritetaan yllä olevaa yksinkertaista Java-luokkaa vastaan, koodi tulostaa oikeat tiedot, koska Groovy epäsuorasti kutsuu toString ()
menetelmä "valtion" esiintymässä Osavaltio
kytketään päälle. Samanlainen toiminnallisuus voidaan nyt saavuttaa Java-sovelluksessa, mutta sinun on nimenomaisesti soitettava toString ()
päällä olevaan esineeseen. On myös syytä muistaa, että kun kirjoitin alkuperäisen version tästä viestistä vuoden 2010 alussa, Java ei tue merkkijonojen kytkemistä päälle. Edellä mainitun suorittamisen tulos näkyy alla olevassa kuvakaappauksessa (komentosarjan nimi ei vastaa yllä olevaa, koska tämä on vanha näyttökuva tästä alkuperäisestä viestistä ennen sen korjaamista ja päivittämistä).
Groovyn ja isCase
menetelmällä, voin kytkeä päälle melkein minkä tahansa haluamasi tietotyypin. Tämän osoittamiseksi Java-luokka Osavaltio
käytetään ja sen koodiluettelo on esitetty alla. Se sisältää a isCase (osavaltio)
menetelmä, jota Groovy epäsuorasti kutsuu, kun Osavaltio
on kytketty vastaan kuin tapauksessa
valintoja. Tässä tapauksessa isCase (osavaltio)
menetelmä yksinkertaisesti kutsuu State.equals (objekti)
menetelmä sen selvittämiseksi tapauksessa
on totta. Vaikka tämä on tyypillistä käyttäytymistä isCase (objekti)
, olisimme voineet saada sen selvittämään, oliko asia vai ei millään tavalla, mitä halusimme.
Listaus 3. State.java
pakkaus pölyä.esimerkkejä; tuo staattinen java.lang.System.out; public class State {private String stateName; public state (lopullinen merkkijono newStateName) {this.stateName = newStateName; } / ** * Menetelmä, jota Groovyn kytkimen on käytettävä implisiittisesti, kun tämän * luokan esiintymä kytketään päälle. * * @param salīdzaaTilavaltio välitti minulle tapauksen kautta verratakseni minua. * / public boolean isCase (lopullinen tila vertaile valtiota) {return vertaile valtiota! = null? CompareState.equals (tämä): false; } public boolean equals (final Object other) {if (! (other state of State)) {return false; } lopullinen valtio muu valtio = (osavaltio) muu; jos (this.stateName == null? otherState.stateName! = null:! this.stateName.equals (otherState.stateName)) {palauttaa false; } return true; } @Override public String toString () {return this.stateName; }}
Yllä esitetty yksinkertainen tavallinen Java-luokka toteuttaa isCase
menetelmä, jonka avulla Groovy voi kytkeä sen päälle. Seuraava Groovy-komentosarja käyttää tätä luokkaa ja pystyy käynnistämään onnistuneesti Osavaltio
.
#! / usr / bin / env groovy import dustin.esimerkkejä.Valtion osavaltio = uusi osavaltio ("Arkansas") osavaltio alabama = uusi osavaltio ("Alabama") osavaltio arkansas = uusi osavaltio ("Arkansas") osavaltio alaska = uusi osavaltio ("Alaska") osavaltio arizona = uusi osavaltio ("Arizona") osavaltio kalifornia = uusi osavaltio ("Kalifornia") osavaltio colorado = uusi osavaltio ("Colorado") osavaltio connecticut = uusi osavaltio ("Connecticut") tulosta "Motto tila $ {state.stateName} on "" kytkin (osavaltio) {tapaus alabama: tulosta "Audemus jura nostra puolustaja" taukotapa alaska: tulosta "pohjoiseen tulevaisuuteen" taukotapa arizona: tulosta "Ditat Deus" rikkoutumistapa arkansas : print "Regnat populus" break case california: print "Eureka" break case colorado: print "Nil sine numine" break case connecticut: print "Qui transtulit sustinet" break default: print "<>"} println "'"
Seuraavan näytön tilannekuvan tulos osoittaa, että Groovy-komentosarja pystyy käynnistämään onnistuneesti a-ilmentymän Osavaltio
esine. Ensimmäinen komento käyttää aiemmin käsiteltyä "yksinkertaista" esimerkkiä ja toinen komento käyttää esimerkkiä, joka täytyy käynnistää Osavaltio
on isCase (osavaltio)
menetelmä.
Tämän kyvyn saada luokat olla "vaihdettavissa" kauneuteen perustuen isCase ()
Menetelmä on, että se sallii tiukemman syntaksin tilanteissa, jotka muuten olisivat saattaneet vaatia pitkiä jos
/muuten jos
/muu
rakentaa. On parempi välttää tällaisia rakenteita kokonaan, mutta joskus törmäämme niihin ja Groovyyn vaihtaa
lausunto tekee heistä vähemmän tylsiä.
Se on täysin mahdollista Groovyn kanssa vaihtaa
saada useita kytkinvaihtoehtoja vastaamaan määritettyjä ehtoja. Siksi on tärkeää luetella tapauksessa
lauseet, joiden ottelu on suositeltava, koska ensimmäinen ottelu toteutetaan. tauko
avainsanaa käytetään Groovy's vaihtaa
kuten se on Javassa.
Groovyn toiminnassa on paljon enemmän voimaa vaihtaa
tukee. Joitakin tämän voiman kattavia viestejä ovat Groovy Goodness: The Switch Statement, Groovy, anna minun laskea tapoja, joilla rakastan sinua, ja Groovy-ohjeet.
Tämän tarinan "Groovy: Kytke steroidit päälle" julkaisi alun perin JavaWorld.