1. Iki gezek ýaýyň başlangyjy
Jübüt ýaýlary ulanyp başlamak (
mundan beýläk goşa ýaýyň başlangyjy diýilýär ), beýannama bilen bir wagtda sanaw, düzmek we karta ýaly kolleksiýalary döretmek üçin Java guralydyr.
Haçan-da goldanýan önümleriň ýa-da walýutalaryň sanawy ýaly kesgitli elementleri bolan sanawlar gerek bolsa, sanawy başlamak bilen bir wagtda yglan etmek koduň okalmagyny ýokarlandyrýar. Kodda bir wagtyň özünde başlangyç bilen kolleksiýalary döretmek üçin başga standart usullar ýoklugy sebäpli, goşa dykyz başlangyç meşhurlyga eýe bolýar. Gynansagam, beýleki programmirleme dillerinden tapawutlylykda Java sözleriň ýygyndysyny goldamaýar. Bu çäklendirme sebäpli, hatda az sanly elementi
bilenadd()
üýtgedip bolmaýan sanaw döretmek , islenýän elementleri soňky gaplamak bilen goşmak üçin gaýtalanýan jaň görnüşinde köp setir kod ýazmaga mejbur edýär :
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(3);
list.add(5);
list.add(7);
List<Integer> unmodifiableList = Collections.unmodifiableList(list);
Bu ýönekeýleşdirilip bilinjek zerur däl düşündiriş. Statik sanawlary özümiz üçin amatly görnüşde dolduralyň, ýagny başlangyç wagtynda gönüden-göni statiki bloklarda, bu başlangyç
Double brace
bize kömek eder we hemme zady bir setirde ýazmaga mümkinçilik berer:
List<Integer> list = Collections.unmodifiableList(new ArrayList<Integer>() {{
add(2);
add(3);
add(5);
}});
Şonuň ýaly-da,
Double brace
başlangyç bize bahalary doldurmaga kömek eder we
HashMap
:
Map<Integer, String> intToString = new HashMap<Integer, String>(){{
put(1, "one");
put(2, "two");
put(3, "three");
}};
Bularyň hemmesi gaty owadan görünýär, ýöne kemçilikleri bar, bu bolsa goşa dykyz başlangyjy anti-nagyş edýär. Olara indiki bapda has giňişleýin serederis.
Iki goşa dyrnagyň başlangyjy we zyýany.
Double
ýaýyň başlangyjy näbelli içki synpyň döredilmegini ulanýar . Ilkibaşda üstünde gizlenen zat,
Double brace
başlangyç başlangyç her gezek ulananyňyzda öz başlangyjy bilen hasam başlangyç synp döredýär. Mundan başga-da, ýadyň syzmagyna sebäp bolup biljek bu hususy synp üçin gizlin salgylanma ulanylýar. Şeýle hem, näbelli synpyň içine girip bilmeýändigimiz üçin arwah operatoryny (göwher operatory <>) ulanyp bilmersiňiz.
.
_ { _ { _ näbelli) synpyna degişlidir.) |
Taraz:
- Kodda setirleri azaltmak
- Bir aňlatmada döretmek we başlangyç.
Minuslar:
- Sizden gizlenen anonim synp döretmek.
- Her gezek ulananymyzda, mysal üçin goşmaça çykdajylar bolýar.
- Her gezek ýadyň syzmagyna sebäp bolup biljek gizlin salgylanma döredilýär.
Karar: aboveokardaky zyýany we goşa dyrnak üçin alternatiwalaryň bolmagy sebäpli, başlangyç Java dünýäsinde anti-nagyş hasaplanýar.
Java-da goşa ýaýyň başlangyjy üçin alternatiwalar
Gowy habar, Java-da şol bir maksatlara ýetmegiň başga ýollary bar. Kodlaryň bir setirinde, aşakda görkezilişi ýaly, Toplama synpyndan Göçürmek konstruktoryny ulanyp, “ArrayList” -iň döredilmegini we başlangyjyny amala aşyryp bileris:
List<Integer> list = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(2, 3, 5)));
Arrays.asList()
ArrayList
göçürme konstruktoryna berlen kesgitlenen uzynlygyň sanawyny bize gaýtaryp berer .
Arrays.asList()
Yzyna gaýdyp gelen we kesgitlenen uzynlykdaky sanawlaryň arasyndaky tapawudy ýadyňyzdan çykarmaň -
Collections.unmodifiableList()
elementlerini goşup ýa-da aýryp bilmersiňiz , ýöne yzyna gaýtarylan sanaw bilen edip bolmajak
ArrayList
bir elementi indeks arkaly üýtgedip bilersiňiz . Kiçijik sanaw almak isleseňiz, bu iň oňat usul, beýleki kolleksiýalar üçin has aýdyň bolmasa-da , -a döretmezden ozal döretmeli bolarsyňyz . Thisöne bu entegem goşa dykyzlandyryşdan has gowudyr, sebäbi bu ýagdaýda her gezek ulanylanda goşmaça içerki anonim synp döredilmeýär. Java 8 bilen işleýän bolsaňyz, başga bir alternatiw usulyňyz bar. JDK 8 Stream API, çykyş usullaryny kolleksiýa birleşdirip, ownuk kolleksiýalary döretmäge kömek eder :
set()
Collections.unmodifiableList()
Set
List
Set
Stream Factory
List
List<String> list = Collections.unmodifiableList(Stream.of("abc", "bcd", "cde").collect(toList()));
Usuly aşakdaky ýaly
Set
ulanyp bilersiňiz :
Collectors.toSet()
Collectors.toList()
Set<String> set = Collections.unmodifiableSet(Stream.of("abc", "bcd", "cde").collect(toSet()));
Theeri gelende aýtsak,
Stream collect
usullar döredýän kolleksiýalarynyň üýtgemelerden goralmagyny kepillendirmeýär. Java 8-de, yzyna gaýdyp gelen kolleksiýalar (-
ArrayList
,
HashSet
we ýaly
HashMap
) adaty bir zat (olary üýtgedip bileris), ýöne bu hakykat geljekki JDK neşirlerinde düzedilip bilner. Häzirlikçe
Double brace
Java-da başlangyç hakda. Bu şablon synaglar we görkezişler üçin kabul ederliklidir, ýöne önümçiligi ulanmak üçin ýeterlik däl. Özboluşly kemçilikleri sebäpli, goşa dyrnagyň başlangyjy şu günler, esasanam elýeterli alternatiwalary göz öňünde tutup, anti-nagşa öwrüldi. Özümem bu gurluşy statiki kartalary başlatmak üçin ulanýaryn we hut şu. Sebäbi, konstruktorynda döretmek bilen birleşip,
List
döretmegi makul bildim . Java 8 ulansam - Stream API ulanyp dizaýn we .
Degişli makalalar: Bu sapakdan lezzet alýan bolsaňyz we Java programmirleme nagyşlary, ýörelgeleri we iň oňat tejribeleri barada has giňişleýin öwrenmek isleseňiz, sahypamyzdaky beýleki makalalary hem gözläp bilersiňiz .
Maslahat berilýän okamak: nagyşlar we iň oňat tejribeler barada has giňişleýin öwrenmek isleseňiz,
Joşua Bloçyň “Netijeli programmirleme” programmasyny okamaly bolsaňyz , hiç bir kitap ýerini alyp bilmez. Java-da eýýäm ökde bolsaňyz we dizaýn nagyşlary hakda kitap gözleýän bolsaňyz, gyzykly we okamak aňsat bolan gülkünç stil,
“Ilki bilen kelläňize üns beriň. Dizaýn nagyşlary " .
Collections
Array.asList
collect()
Terjimeçiden: Bloch-yň asyl kitabyna bilkastlaýyn baglanyşyk berdim, sebäbi rus diline terjimesi şowsuz (mysal üçin, Gurluşykçy = konstruktor). |
Makalanyň terjimesi Java-da goşa ýaýyň başlangyjy näme? Nusga garşy mysal (2015-nji ýylyň oktýabr aýynda neşir edildi).
GO TO FULL VERSION