enum
Bu gün setir sanlary bilen işlemek, has takygy, yzygiderli yzygiderlilik bilen özara gatnaşygy gurnaýan sapaklar bilen gürleşeris .
Setir sanlaryny ulanmak
Programmany işläp düzmekde, belli bir setir bahalarynyň toplumynda işlemeli. Islendik zat bolup biler. Mysal üçin, programma tarapyndan goldanýan reňk kodlarynyň sanawy ýa-da programmamyzyň täsirleşip bilýän enjamlarynyň sanawy, pasyllar we ş.m. Bularyň hemmesi umumy gurluşly, Java kod derejesinde programma täsirini ýola goýmak zerur bolan öňünden kesgitlenen setir yzygiderliligi. Öňünden kesgitlenen setir (we beýleki) yzygiderlilik bilen täsirleşmeli bolanyňyzda, iň oňat çözgüt, öz synpyňyzy ýazmakdyr
enum
.
enum
Aşakda öwrülmegiň mysallaryna serederis
string
.
Setir sanlaryny döretmek
enum
Programmany ýerleşdirmek üçin dürli gurşawyň sanawyny, şeýle hem her gurşawyň URL-ni saklaýan synp döredeliň :
public enum Environment {
PROD("https://release.application.com/"),
TEST("https://test.application.com/"),
AUTO_TEST("https://autotest.application.com/"),
DEV("http://localhost:8080");
private final String url;
Environment(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
}
Bu synpda 4 gurşawy kesgitledik:
PROD
- boşatmak
TEST
- el bilen synag etmek üçin
AUTO_TEST
- awtotestler üçin gurşaw
DEV
- ösüş we düzediş üçin ýerli
Şeýle hem bu gurşawlaryň her biri üçin 4 URL. Geliň, käbir möhüm nokatlara üns bereliň.
- Her URL, sanamagymyzda yzygiderli üýtgewsizdir: olar her
enum
üýtgewsiziň gapdalyndaky gabygyň içinde kesgitlenýär.
- Her üýtgewsiz bilen birmeňzeş jedeli alýan konstruktor bolmaly
enum
.
- Konstruktoryň gerimi
private
hem package private
.
- Üýtgeýjini kesgitlemek zerur - kesgitlän setir yzygiderliligimizi saklaýan synp meýdançasy. Setir yzygiderliliginiň bahalaryny daşardan ulanmak üçin bu ugur üçin has gowy usul döretmeli.
Setir sanamagyň üstünde gaýtalamak
Bu etapda, bar bolan bahalaryň üstünden eýýäm gaýtalap bileris
enum
, şeýle hem olar bilen baglanyşykly yzygiderli yzygiderliligi alyp bileris. Islendik synpyň ähli gymmatlyklaryny almak üçin
enum
usuly ulanmaly
values()
:
public class Main {
public static void main(String[] args) {
for (Environment env : Environment.values()) {
System.out.println(env + " : " + env.getUrl());
}
}
}
Netije:
PROD : https://release.application.com/
TEST : https://test.application.com/
AUTO_TEST : https://autotest.application.com/
DEV : http://localhost:8080
Mysaldan görnüşi ýaly,
enum
hemişelik adyny çap etmek üçin ony usula geçirdik
System.out.println
we bu hemişelik bilen baglanyşykly url-y çap etmek üçin kesgitleýjimizi ulanýardyk.
Enumdan yzygiderli setir almak
Islendik setir üýtgewsiziniň bahasyny almak üçin, islendik üýtgeýjä hem jaň edip bileris
enum
:
public class Main {
public static void main(String[] args) {
String prodUrl = Environment.PROD.getUrl();
String devUrl = Environment.DEV.getUrl();
System.out.println("Production url is: " + prodUrl);
System.out.println("Development url is: " + devUrl);
}
}
Netije:
Production url is: https://release.application.com/
Development url is: http://localhost:8080
Adyny yzygiderli almak
enum
Käwagt setir ady bilen hemişelik almak zerur .
valueOf(String)
Bu , ady bilen hemişelik gaýtaryp berýän usul bilen amala aşyrylýar :
public class Main {
public static void main(String[] args) {
Environment prod = Environment.valueOf("PROD");
Environment dev = Environment.valueOf("DEV");
System.out.println("Production url is: " + prod.getUrl());
System.out.println("Development url is: " + dev.getUrl());
}
}
Netije:
Production url is: https://release.application.com/
Development url is: http://localhost:8080
Emma bu ýerde seresaplylyk gerek. Usul görkezilen at bilen hemişelik tapmasa
enum
, kadadan çykma bolar
java.lang.IllegalArgumentException
.
Setiri Enuma öwürmek
Käwagt ters zerurlyk ýüze çykýar. Gymmatlygyny bilip
enum
,
enum
hemişelik özüni alyň. Bular. mysalymyzda, belli bir adresi bilip, degişli hemişelik almaly
Environment
. Munuň üçin birnäçe wariant bar. Bularyň hemmesi
enum
synpyň özünde kämilleşmegi talap edýär. Wariant 1. Synpyň içinde sanamak.
enum
Bir setiri kabul edip, synpyň ähli gymmatlyklary bilen deňeşdirjek usul döretmeli . Gabat gelýän bolsa, usul islenýän sanlary yzyna getirer. Mysal üçin,
Environment
synpyň içinde aşakdaky usuly döretmeli:
public static Environment getEnvByUrl(String url) {
for (Environment env : values()) {
if (env.getUrl().equals(url)) {
return env;
}
}
throw new IllegalArgumentException("No enum found with url: [" + url + "]");
}
enum
Soňra şeýle setirden alyp bileris :
public class Main {
public static void main(String[] args) {
String url = "http://localhost:8080";
Environment env = Environment.getEnvByUrl(url);
System.out.println("Environment name for url=[" + url + "] is: " + env);
}
}
Netije:
Environment name for url=[http://localhost:8080] is: DEV
Bu çemeleşmäniň zyýanly taraplary bar. Her gezek
enum
üýtgewsiz bolmak üçin ähli gymmatlyklary gaýtalamaly we belli bir mukdarda deňeşdirmeli bolarsyňyz. Bu ýagdaýda ýerine ýetiriş jezasy yzygiderli sany we şuňa meňzeş amallaryň sany bilen kesgitlener. Bu meseläni çözmegiň ikinji usulynda bu mesele ýok. Doly
Enum
synp kody:
public enum Environment {
PROD("https://release.application.com/"),
TEST("https://test.application.com/"),
AUTO_TEST("https://autotest.application.com/"),
DEV("http://localhost:8080");
private final String url;
Environment(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
public static Environment getEnvByUrl(String url) {
for (Environment env : values()) {
if (env.getUrl().equals(url)) {
return env;
}
}
throw new IllegalArgumentException("No enum found with url: [" + url + "]");
}
}
2-nji wariant: Ulanyş
HashMap
Bu ýagdaýda, öz sanawymyzyň içinde karta döredýäris we ony bir gezek jemläris, soňra bolsa bahalary alarys:
public enum Environment {
PROD("https://release.application.com/"),
TEST("https://test.application.com/"),
AUTO_TEST("https://autotest.application.com/"),
DEV("http://localhost:8080");
private final String url;
Environment(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
private static final Map<String, Environment> LOOKUP_MAP = new HashMap<>();
static {
for (Environment env : values()) {
LOOKUP_MAP.put(env.getUrl(), env);
}
}
public static Environment getEnvByUrl(String url) {
return LOOKUP_MAP.get(url);
}
}
Ulanyş nukdaýnazaryndan iki wariant hem birmeňzeş:
public class Main {
public static void main(String[] args) {
String url = "http://localhost:8080";
Environment env = Environment.getEnvByUrl(url);
System.out.println("Environment name for url=[" + url + "] is: " + env);
}
}
Netije:
Environment name for url=[http://localhost:8080] is: DEV
Emma bu usulyň hem kemçilikleri bar. Birinjiden, has köp kod bar. Ikinjiden,
HashMap
ähli
enum
bahalar programma ýadynda hemişelik saklanar. Görşüňiz ýaly, hemme zadyň gowy we erbet taraplary bar. Classesöne sapaklaryň adatça kän bir gymmatlyk saklamaýandygyny göz öňünde tutsak
enum
, kemçilikleri görünmeýär diýen ýaly. Üns beriň: eger şeýle amal (Java Enum-y String gymmaty bilen almak) ýygy-ýygydan ýerine ýetirilse, ikinji warianty ulanmak has gowudyr. Bu mowzuk we
Enum
umuman sapaklar barada JavaRush kursynda öwrenip bilersiňiz. Talyplar JavaRush-y
Enum
eýýäm
bäşinji derejäniň birinji leksiýasynda öwrenýärler .
GO TO FULL VERSION