Java alapértelmezett paraméterek a módszer túlterhelésével
1. Áttekintés
Ebben a rövid bemutatóban bemutatjuk a módszer túlterhelésének használatát az alapértelmezett paraméterek szimulálására a Java-ban.
Itt azt mondjuk, hogy szimulálunk, mert más OOP nyelvektől eltérően (például a C ++ és a Scala), a Java specifikáció nem támogatja az alapértelmezett érték hozzárendelését a method paraméterhez.
2. Példa
Példaként főzzünk egy teát! Először szükségünk lesz egy Tea POJO:
nyilvános osztály Tea {static final int DEFAULT_TEA_POWDER = 1; privát karakterlánc neve; privát int tej; saját logikai gyógynövények; magán int cukor; privát int teaPor; // standard getters}
Itt a név kötelező mező, mint a mi Tea legalább névvel kell rendelkeznie.
Akkor nem lehet tea teapor nélkül. Tehát feltételezzük, hogy a felhasználó normál 1 evőkanálot szeretne teaPor teájukban, ha a hívás idején nem biztosítják. Ez az első alapértelmezett paraméterünk.
A többi opcionális paraméter a tej (ml-ben), gyógynövények (hozzáadni vagy nem hozzáadni), és cukor (evőkanálban). Ha valamelyik értékük nincs megadva, akkor feltételezzük, hogy a felhasználó nem akarja őket.
Nézzük meg, hogyan lehet ezt elérni a Java-ban a módszer túlterhelésével:
public Tea (Húrnév, int tej, logikai gyógynövények, int cukor, int teaPor) {this.név = név; ez.tej = tej; ez.gyógynövények = gyógynövények; ez.cukor = cukor; ez.teaPow = teapor; } public Tea (húrnév, int tej, logikai gyógynövények, int cukor) {ez (név, tej, gyógynövények, cukor, DEFAULT_TEA_POWDER); } public Tea (Húr neve, int tej, logikai gyógynövények) {ez (név, tej, gyógynövények, 0); } public Tea (húrnév, int tej) {ez (név, tej, hamis); } public Tea (karakterlánc neve) {this (név, 0); }
Mint nyilvánvaló, itt a konstruktor láncolását használjuk, a túlterhelés egyik formáját, hogy a módszer paramétereit néhány alapértelmezett értékkel megadjuk.
Most adjunk hozzá egy egyszerű tesztet, hogy ezt működés közben lássuk:
@Test public void whenTeaWithOnlyName_thenCreateDefaultTea () {Tea blackTea = new Tea ("Fekete Tea"); assertThat (blackTea.getName ()). isEqualTo ("Fekete tea"); assertThat (blackTea.getMilk ()). isEqualTo (0); assertThat (blackTea.isHerbs ()). isFalse (); assertThat (blackTea.getSugar ()). isEqualTo (0); assertThat (blackTea.getTeaPowder ()). isEqualTo (Tea.DEFAULT_TEA_POWDER); }
3. Alternatívák
Az Java alapértelmezett paraméter-szimulációjának más módjai is elérhetők. Néhány közülük:
- Builder mintával
- opcionális használatával
- A nullák engedélyezése metódus argumentumként
Így használhatjuk a nulla argumentum engedélyezésének harmadik módját a példánkban:
nyilvános tea (húr neve, egész tej, logikai gyógynövények, egész cukor, egész tea por) {this.név = név; ez.tej = tej == null? 0: milk.intValue (); ez.gyógynövények = gyógynövények == null? hamis: gyógynövények.booleanValue (); ez.cukor = cukor == null? 0: sugar.intValue (); this.teaPowder = teaPowder == null? DEFAULT_TEA_POWDER: teaPowder.intValue (); }
4. Következtetés
Ebben a cikkben a módszer túlterhelését vizsgáltuk az alapértelmezett paraméterek szimulálására a Java-ban.
Noha más módon is elérhetjük ugyanezt, a túlterhelés a legtisztább és legegyszerűbb. Mint mindig, a kód elérhető a GitHubon.