poniedziałek, 5 października 2009

Co nowego w Java 7 ? Część druga

Dawno dawno temu pisałem już co nowego było planowane w nowej Javie (artykuł: Co nowego w Java 7 ?). Dzisiaj zapraszam do obejrzenia wywiadu z Dannym Cowardem - głównym architektem dla aplikacji klienckich w firmie Sun. Przedstawia on pokrótce co przeszło ciężkie głosowania i dyskusje i pojawi się w nowej Javie.

Czas trwania: 24:31

Podsumowując:
Nowe słowo kluczowe module
Służyć będzie do tworzenia modułów. Docelowo ma zastąpić wykorzystywanie classpath.
Przykład:
module wazny_modul;
package com.blogspot.wookasz.java7;

class WaznaKlasa {
//...
}
Definicja modułu w pliku java:
modules wazny_modul @1.5 {
requires inny_wazny_modul @2.0;
requires jeszcze_inny_wazny_modul @1.0;
}


Switch po Stringu
To przetrwało. Przykład z poprzedniego artykułu:
String str = "test";
switch(str) {
case "test":
System.out.println("TEST!");
break;
case "test2":
System.out.println("TEST2");
break;

default:
System.out.println("KLOPS!");
break;
}


Wyłapywaniewielu typów wyjątków w jednym bloku catch.
To też przetrwało (na szczęście !)
try {
mbs.registerMBean(mbean, name);
} catch (InstanceAlreadyExistsException | 
MBeanRegistrationException |
NotCompliantMBeanException e) {
logger.log(e);
throw e;
}


Wnioskowanie typu
Też przeszło:)
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

Będzie można zastąpić przez:
Map<String, List<String>> anagrams = new HashMap<>();

Elvis operator (lub Null-Safe Operator) ?:
O tym szczerze mówiąc wcześniej nie słyszałem. Często w kodzie sprawdzamy czy jakiś obiekt nie jest nullem i w zależności od tego wykonujemy inne operacje. Teraz takiego ifa będzie można zastąpić jedną instrukcją:
String s = object?.toString() ?: "nothing";
int i = intObject ?: -1;
Nie jestem tylko przekonany czy ten pierwszy zapis jest w pełni zrozumiały jak się na niego spojrzy...

NIO #2 API
I/O w nowej odsłonie!:) Co teraz dodatkowego ?
- przeszukiwanie katalogów (dość rozbudowane)
- nasłuchiwanie na zmiany w plikach
- asynchroniczność
I inne

Poza tym:
- nowości w Swingu (wywiad od 16minuty, pokazują demo)
- nowy odśmiecacz pamięci (może będzie działać ?:P)
- zmiany w bytecodzie pod kątem innych języków programowania
- zmiany w bibliotekach od kolekcji i współbieżności (przykłady)
- duuuużo rzeczy w ramach projektu Coin. Zapraszam do zapoznania się z ich stroną -> link. Długa lista nowości.

Dla osób do których jeszcze nie dotarła informacja - NIE będzie domknięć w nowej Javie! Nie skomentuje tego...

Plan wydania -> Marzec 2010

https://jdk7.dev.java.net/
http://openjdk.java.net/projects/jdk7/

EDIT:
Jednak domknięcia będą :) -> Co nowego w Java 7 ? Część trzecia - będą domknięcia !

EDIT 2:
Jednak nie będzie... -> (Prawdopodobnie ostatnie) Podsumowanie nowości w Java 7

3 komentarze:

  1. Elvis operator jest znany z języków dynamicznych, jak groovy żeby nie szukać daleko. Fajna sprawa na przykład na widokach, gdy robimy coś jak (tylko przykład) 'textfield text="{osoba.drugieImie?.toUpperCase()}"'

    OdpowiedzUsuń
  2. Tutaj akurat jest trochę przykład zakręcony, bo miesza de-facto dwa operatory.

    W Groovy mamy elivsa (?:), który zwraca nam wartość danego obiektu/metody jeśli obiekt/wynik działania metody nie jest nullem lub falsem. W przeciwnym przypadku zwraca to co jest po elvisie. To takie skrócenie operatora tenarnego.

    A operator (?.) to Safe Navigation Operator. Służy do wywołania metody na czymś, co nie do końca wiemy czy jest nullem czy nie. A jeśli jest, to zostanie zwrócony po prostu null zamiast wyrzucić NPE.

    Mam nadzieję, że w Javie 7 będzie to działać tak samo, bo dużo ludzi już się do wersji Groovy przyzwyczaiło :)

    OdpowiedzUsuń
  3. A przykład Marcina to chyba jedno z najpopularniejszych zastosowań safe navigation w Grails :)

    OdpowiedzUsuń