I wracam po dwóch dniach choroby do zapoznawania się z nowościami w JDK7. Dzisiaj czas na podstawowe zmiany, czyli:
Core
- Project Jigsaw - Modularyzacja Projekty w Javie stają się coraz większe, samo JDK staje się ogromne. Stąd potrzeba modularyzacji. Podstawą do wdrożenia modułów w JDK ma być projekt Jigsaw. Korzysta on z wcześniej omawianego przez mnie JSR294 - czyli zmian w języku Java udostępniających modularyzacje (JDK 7 nowości 2). W proponowanym rozwiązaniu ma się pojawić plik opisujący metadane modułu. Plik ten (nazwany module-info.java i umieszczony w podstawowym katalogu modułu) opisywałby zależności między tym modułem a innymi modułami. Mógłby mieć np. następującą składnie:
module M1@1.0 provides M2@2.0, M3@3.0 {
requires M4@4.0, M5@5.0;
permits M6;
}
Nasz moduł M1 w wersji 1.0 dostarcza funkcjonalność modułu M2 (w wersji 2.0) i M3 (w wersji 3.0), do działania wymaga M4 (w wersji 4.0) i M5 (w wersji 5.0). Pozwala z siebie korzystać modułowi M6. Krótkie przeczytanie tego uzmysławia jaką fajną zabawkę dostaną wszyscy programiści - dzięki zdefiniowaniu konkretnych wymagań (w konkretnych wersjach), dzięki definiowaniu, że moduł dostarcza konkretnych funkcjonalności (w konkretnych wersjach) wszystkie biblioteki będą mogły łatwiej ze sobą współpracować. Będzie można łatwo zastosować "zamienniki" - implementacje innych autorów. Projekt Jigsaw nie będzie jednak wchodził do Oficjalnej Java SE 7 Platform Specification i może nie być wspierany przez inne (niż Sunowskie OpenJDK) JDK.
- łatwe kopiowanie:
import java.nio.file.*;
Path home = Path.get("/home/gus");
Path profile = home.resolve(".bash_profile");
// Backup existing file
profile.copyTo(home.resolve(".bash_profile.backup"));
Path file = Path.get("/usr/spool");
// read file attributes of the link
BasicFileAttributes attrs = Attributes
.readBasicFileAttributes(file, false);
if (attrs.isSymbolicLink()) {
// read target of link
Path target = file.readSymbolicLink();
// check /usr/spool == /usr/spool/../var/spool
assert file.isSameFile(file.resolve(target));
}
Path dir = Path.get("mydir");
DirectoryStream stream = dir.newDirectoryStream("*.java");
try {
for (DirectoryEntry entry: stream) {
System.out.println(entry.getName());
}
} finally {
stream.close();
}
Uff. Trochę tego jest ale nie są to (poza projektem Jigsaw) tak bardzo interesujące rzeczy.
c.d.n.