Aktywne Wpisy
Michal_Spira +88
no i to jest powód, dla którego jest mało dzieci, a nie jakiś k---a brak mieszkań
#heheszki #smiesznypiesek #nieruchomosci
#heheszki #smiesznypiesek #nieruchomosci
arkan997 +226
Skopiuj link
Skopiuj linkWykop.pl
Trochę się nudziłem, więc spisałem sobie po krótce czego oczekujemy w Javie9.
Może być fajnie
tl;dr
1. Modularność czyli Project Jigsaw
- Modularny kod. JRE i JDK zostaną zreorganizowane w interoperacyjne moduły. Wprowadzi to możliwość tworzenia aplikacji, które będzie można z łatwością odpalać na małych urządzeniach.
- Posegmentowany code cache - W zasadzie lekki improvement kompilacji. Stos będzie podzielony na 3 segmenty:
- Non-method code trzymany permamentnie w pamięci
- Kod, który ma potencjalnie długi cykl życia (non-profiled code)
- Kod przejściowy (profiled code)
- Skrócenie czasu budowania
- Delikatnie zmieniony tryb deployu dzięki modułom
http://openjdk.java.net/projects/jigsaw/
2. Streamy
O jejku jak się jaram. Jestem pewien że sporo ułatwi w pracy.
Jak sama nazwa wskazuje, zbieramy obiekty dopóki nie zostanie spełniony wniosek w predykacie.
Analogicznie (Tylko że odwrotnie :P)
Zwraca sekwenyjny Stream zawierający jeden element jeśli nie jest nullem, w innym wypadku zwraca pusty Stream.
Widzę jedną poważną zaletę: zamiast pakować filtrowanie po elementach żeby pozbyć się nulli, pewnie będzie można jakoś z tym zakombinować.
Z drugiej strony - możliwe, że będzie to pewne obejście dla Optionali przydatne przy grzebaniu z bazą.
No ale zobaczymy jak to w praktyce wyjdzie.
eeee, co?
A no, to:
Gdzieś to już widziałem :D
Zwróci stream dat. Według mnie - super, bardzo często czegoś takiego potrzebowałem.
Collectors
Można przenieść filtrowanie do collectora.
Przykład:
Teraz będzie można w collectorach użyć spłaszczania(?) do grupowania elementów.
Przykład:
3. Usprawnienia Optionali
Czyli w zasadzie trochę rozbudowany ifPresent() znany z Optionali z tym, że pozwala nam wywołać akcję na zdarzenie, gdy isPresent zwróciłoby false:
Jako argument przyjmuje funkcję, która zwraca/produkuje Optionala gdy ten nie zostanie wytworzony wcześniej.
Przykład jak to mogłoby działać w Javie8:
No ok, ale nie dostajemy Optionala.
Rozwiązanie:
Jest propozycja żeby pozbyć się Optional.get() i zmienić jej nazwę do czegoś innego.
Nie wiadomo czy będzie w Javie9 ta zmiana.
4. G1GC!
Ok ok, bez szału. Wprowadzony w Java7u4. Docelowo jest propozycja żeby był domyślnym GC.
http://openjdk.java.net/jeps/248
http://www.oracle.com/technetwork/tutorials/tutorials-1876574.html
5. Microbenchmarki!
The Java Microbenchmarking Harness wchodzi do Javy jako oficjalne narzędzie do benchmarków.
http://openjdk.java.net/projects/code-tools/jmh/
6. Interfejsy
Wprowadzili już domyślne metody, to teraz będzie można zrobić domyślnie zaimplementowane prywatne metody. W interfejsach...
7. Try-with-resources na efektywnie finalnych zmiennych(WTF? Dobra, po ludzku: try-with-resources on effectively final variables)
8. Operator diamentowy znany z tworzenia np.: kolekcji wprowadzony do anonimowych klas.
9. Pełne wsparcie dla HTTP/2.0 lub inaczej - HTTP/2.
Dodatkowo nowy klient HTTP mający zastąpić HttpUrlConnection, plus wsparcie właśnie HTTP/2 i websocketów.
10. Rozbudowane ProcessAPI (nie pracowałem z nim, nie będę wymyślał czarów. Jeżeli ktoś coś kiedyś działał to byłbym wdzięczny za komentarz)
11. StackWalker - łatwe przemierzanie stacku wątku (coś dla niskopoziomowców)
http://openjdk.java.net/jeps/259
12. Reactive Streams
Reactive programming staje się powoli coraz popularniejszy. Spring też z tym kombinuje: http://docs.spring.io/spring-framework/docs/5.0.0.M1/spring-framework-reference/html/web-reactive.html
Tworzy obiekty dla subskrybentów do konsumpcji. Jedyna metoda: subscribe(Subscriber).
------------------
Subskrybuje publishera (zazwyczaj tylko jednego) od którego pobiera obiekty.
------------------
Pierwszy event do wywołania przez publishera
------------------
Pobranie nastepnego obiektu od publishera
------------------
Pobranie komunikatów błędów
------------------
Sygnał, że nie ma więcej obiektów które mają dotrzeć do subskrybenta
------------------
Połączenie pomiędzy publisherem i subskrybentem.
------------------
Subskrybent może używać tego aby zgłosić zapotrzebowanie na więcej elementów
------------------
Wiadomo
Flow połączenia:
1. Utworzenie Publishera i Subskrybenta
2. Subskrybcja subskrybenta używając Publisher::subscribe
3. Publisher tworzy Subscription i wywołuje Subscriber::onSubscription
4. W pewnym momencie subskrybent wywołuje request(nL) prosząc o n elementów
5. Publisher zaczyna mu je podawać, a ten odbiera je używając onNext(T). Nigdy nie poda więcej niż poproszone n.
6. Publisher może w pewnym momenie wywołać onComplete lub onError
7. Subskrybent może poprosić o następne dane lub zakończyć połączenie wywołując cancel()
13. JShell!
Nie ma co się rozpisywać.
Dodane wsparcie dla REPL(Read-Eval-Print-Loop).
Teraz kiedy będziemy chcieli coś na szybkości sprawdzić nie trzeba będzie pisać nowego testu na chwilę tylko po prostu odpali się konsolę.
14. Collection Factory Methods
Niby można coś takiego zrobić mniej więcej tak:
Według mnie fabryka będzie dużo lepszym rozwiązaniem.
15. Chronology, LocalDate oraz OffsetTime będą mogły zwracać epoch seconds, czyli ilość sekund od 1970-01-01T00:00:00Z
16. Matcher::results
Zwraca Stream pasujących wyników do kryterium. Dane podawane są w takiej samej kolejności w jakiej występują w testowanym inpucie
17. Wsparcie dla GTK3, SHA-3(Jeszcze występujące osobno w bibliotekach od BouncyCastle) i TIFF
linki:
http://blog.codefx.org/java/dev/java-9-stream/
http://blog.takipi.com/5-features-in-java-9-that-will-change-how-you-develop-software-and-2-that-wont/
http://iteratrlearning.com/java9/2016/09/05/java9-optional.html
https://www.sitepoint.com/ultimate-guide-to-java-9/
http://download.java.net/java/jdk9/docs/api/java/util/regex/Matcher.html
http://openjdk.java.net/jeps/266
http://www.javaworld.com/article/2878952/java-platform/modularity-in-java-9.html
http://blog.codefx.org/java/dev/features-project-jigsaw-java-9/
API do nowej wersji:
http://download.java.net/java/jdk9/docs/api/index.html
Odliczanie:
http://www.java9countdown.xyz/
#java #programowanie #java9
hue hue, po prostu prywatne metody* :P
I ja tam dalej czekam na javę 10 ;/
Obok tego drugiego czegoś uważam to za jedną z większych porażek.
To drugie mam na myśli te, v... v....
@Wyrewolwerowanyrewolwer: mogłeś też dodac przykład, nie każdy zna :P
O ile dobrze pamiętam:
InputStream someStream = ...;
try
Jeżeli jest AutoCloseable to można bezpośrednio wpakować do bloku try:
try(InputStream someStream = ...) {
Komentarz usunięty przez autora
dla zaintersowanych, JEP: http://openjdk.java.net/projects/jdk9/
Komentarz usunięty przez autora
Streamy lubię bo sporo ułatwiają, ale nie zawsze są idealne. Do tego są tylko ułamkiem całej platformy/calego ekosystemu z którym pracuję.
W scali zawsze denerwowała mnie ta składnia, jakiś czas pisałem, potem znowu nie, i już nie pamiętam jak się połowę rzeczy zapisywało bo wszędzie masa znaków specjalnych, jak jakieś + i - w generic, do tego po skompilowaniu kod scali zmienia się w istne piekło którego nie sposób użyć już z normalnej javy bez dostania raka co ogranicza używanie twojego dzieła w innych projektach, zdecydowanie wolę
Nie używałem akurat Scalowego kodu w Javie (tylko odwrotnie), może ogarną coś przy pisaniu nowego kompilatora.
Komentarz usunięty przez autora
Ale ja znam Twoje podejście i chyba możemy tu skończyć dyskusję: bo moim zdaniem to że jest dużo ofert w C++ nie sprawia że chcę pisać w C++, wolałbym już wyjechać na zmywak do
Komentarz usunięty przez autora