Java 8 Tutorial
"Java henizem diridir we adamlar muňa düşünip başlaýarlar."
Java 8 bilen tanyşlygymyza hoş geldiňiz. Bu makala size Java 7-den Java 8-e çenli ähli täze aýratynlyklary ädimme-ädim öwrener we çalt we ýönekeý kod mysallary bilen, default interfeýsleri, usul salgylanmalaryny we
nädip ulanmalydygyny
öwrenip bileris. Gaýtalanýan düşündirişler . Makalanyň ahyrynda “Stream API” bilen tanyşarys.
Gereksiz söhbetdeşlik ýok - diňe kod we teswirler! Öňe!
Interfeýsler üçin esasy usullar
Java 8, goşmak arkaly interfeýslere abstrakt däl usullary (durmuşa geçirilýär) goşmaga mümkinçilik berýär
default
.
Bu aýratynlyk giňeltmek usullary hökmünde hem bellidir . Aşakda ilkinji mysal:
interface Formula {
double calculate(int a);
default double sqrt(int a) {
return Math.sqrt(a);
}
}
Abstrakt usuldan başga-da
calculate
, interfeýs
Formula
deslapky usuly kesgitleýär
sqrt
. Bu interfeýsi durmuşa geçirýän synplar diňe durmuşa geçirmeli
calculate
. Adaty usul
sqrt
gutydan ulanylyp bilner.
Formula formula = new Formula() {
@Override
public double calculate(int a) {
return sqrt(a * 100);
}
};
formula.calculate(100);
formula.sqrt(16);
Interfeýs
Formula
anonim synp hökmünde amala aşyrylýar. Kod gerek däl: durmuşa geçirmek üçin 6 setir
sqrt(a * 100)
. Indiki bölümde görşümiz ýaly, Java 8-de ýekeje usuly durmuşa geçirmegiň has owadan usuly bar.
Lambda aňlatmalary
Java-yň öňki wersiýalarynda setirleriň sanawyny tertipleşdirmegiň ýönekeý mysalyndan başlalyň:
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return b.compareTo(a);
}
});
Statik usul
Collections.sort
sanawyň tertibi boýunça sanawy we deňeşdirijini kabul edýär. Elmydama anonim deňeşdiriji synp döredip, ony geçip bilersiňiz. Anonim synp döretmegiň ýerine Java 8-de has gysga bellik, lambda aňlatmasy döredip bilersiňiz.
Collections.sort(names, (String a, String b) -> {
return b.compareTo(a);
});
Görşüňiz ýaly kod has gysga we okamak aňsat. Emma muny has gysga edip bolar:
Collections.sort(names, (String a, String b) -> b.compareTo(a));
{}
Bir setirli beden üçin sözden geçip bilersiňiz
return
. Emma muny has gysga edip bilersiňiz:
Collections.sort(names, (a, b) -> b.compareTo(a));
Java düzüjisi argumentleriň görnüşleri barada bilýär, şonuň üçin olary hem geçirip bilersiňiz. Lambda aňlatmalaryna has çuňňur göz aýlalyň we olaryň ulanylyşyna düşüneliň.
Funksiýa interfeýsleri
Lambda aňlatmalary Java görnüş ulgamyna nädip laýyk gelýär? Her lambda interfeýsde beýan edilen görnüşe gabat gelýär. Şonuň üçin işleýän interfeýsde diňe bir abstrakt usul bolmaly. Bu görnüşiň her lambda aňlatmasy bu abstrakt usula laýyk gelýär. Dymmaklyk usullar abstrakt däldigi sebäpli, zerur bolanda funksional interfeýslerde başlangyç usullary döredip bilersiňiz. Şeýle hem bu interfeýsde diňe bir abstrakt usul bar bolsa, lambda aňlatmalary hökmünde özbaşdak interfeýsleri ulanyp bileris.
@FucntionalInterface
Bu talaplary ýerine ýetirmek üçin düşündiriş goşmaly . Düzediji bu barada bilýär we birden köp abstrakt usul bilen üpjün etmek isleseňiz kadadan çykma atar. Mysal:
@FunctionalInterface
interface Converter<F, T> {
T convert(F from);
}
Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
Integer converted = converter.convert("123");
System.out.println(converted);
@FunctionalInterface
Bellik ýok bolsa koduň hem düzüljekdigini ýadyňyzdan çykarmaň .
Usul we konstruktor salgylanmalary
Aboveokardaky mysal, usul salgylanmalaryny ulanyp hasam kiçeldilip bilner:
Converter<String, Integer> converter = Integer::valueOf;
Integer converted = converter.convert("123");
System.out.println(converted);
Java 8 goşmak arkaly bir usula ýa-da konstruktora salgylanmalary geçirmäge mümkinçilik berýär
::
. Aboveokardaky mysal, statiki däl usullara nädip salgylanyp biljekdigimizi görkezýär, emma statik däl usullara hem salgylanyp bileris:
class Something {
String startsWith(String s) {
return String.valueOf(s.charAt(0));
}
}
Something something = new Something();
Converter<String, String> converter = something::startsWith;
String converted = converter.convert("Java");
System.out.println(converted);
::
Gurluşykçylar bilen nähili işleýändigini göreliň . Başlamak üçin, dürli konstruktorlar bilen mysal synpyny kesgitläris:
class Person {
String firstName;
String lastName;
Person() {}
Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
Indiki, täze obýektleri döretmek üçin interfeýsi kesgitläris:
interface PersonFactory<P extends Person> {
P create(String firstName, String lastName);
}
::
Dörediş zawodyny durmuşa geçirmegiň ýerine, hemmesini konstruktor kömegi bilen birleşdireris :
PersonFactory<Person> personFactory = Person::new;
Person person = personFactory.create("Peter", "Parker");
Konstruktor bilen baglanyşyk döretdik
Person::new
. Java düzüjisi usul goluna gabat gelýän dogry konstruktory awtomatiki saýlar
PersonFactory.create
. ... Dowam etmek. Gynansagam, makalanyň eserini ýatda saklamagyň usulyny tapmadym, bu hakykatdanam geň, terjime wagty gutardy - şonuň üçin soňrak gutararyn. Iňlis dilini bilýän we düşünýänleriň hemmesi üçin -
Asyl makala . Terjimäni düzetmek üçin teklipleriňiz bar bolsa, elýeterli görnüşde ýazyň.
Github hasabym
GO TO FULL VERSION