Przeprowadziliśmy migrację z Java 6 do Java 7 . Projekt jest opóźniony i istnieje ryzyko, że zostanie porzucony, w takim przypadku będzie nadal korzystać z Java 6.
Jakie są szczególne ulepszenia w Javie 7, z którymi moglibyśmy wrócić do naszego menedżera i przekonać go, że ważne jest używanie JDK 7? Poszukuję poprawek błędów, które mógłbym wyróżnić w Oracle Java 7 (w odniesieniu do Java 6). Poprawki bezpieczeństwa, wydajności, Java 2D / drukowania itp. Będą w moim przypadku łatwiejsze do sprzedania. Na przykład poprawki kompilatora nie będą zbyt przydatne.
[Przeglądam wiele stron, takich jak przewodnik adopcji Oracle , baza błędów, pytania dotyczące przepełnienia stosu].
Aktualizacja: Dziękujemy za odpowiedzi. Zmieniliśmy harmonogram aktualizacji na następną wersję. Najbliższe było bezpieczeństwo. Akceptuj najwyższą głosowaną odpowiedź.
Odpowiedzi:
Java 6 osiągnęła EOL w lutym tego roku i nie będzie już otrzymywać publicznych aktualizacji (w tym zabezpieczeń), chyba że kupisz bardzo drogie wsparcie dla przedsiębiorstw.
To powinien być cały potrzebny powód.
Poza tym przytłaczające dowody sugerują, że zgodność wsteczna dla środowisk wykonawczych Java jest doskonała. Możliwe, że wystarczy zastąpić instalacje Java 6 Java 7, a wszystkie aplikacje będą działać bez żadnych problemów. Oczywiście nie jest to gwarantowane i zaleca się obszerne testy w celu potwierdzenia, że rzeczywiście nie będzie żadnych problemów.
źródło
Ogólnie rzecz biorąc, istnieje wiele dość szerokich zmian, aby ułatwić programistom. Twój menedżer może nie przejmować się zbytnio takimi rzeczami, ale sprawienie, aby programiści spędzili mniej czasu na myśleniu o kodzie typu „kocioł”, a tym samym mieli więcej czasu na zastanowienie się nad faktycznym celem tego, co wdrażają, powinien zwiększyć wydajność, zmniejszyć błędy itp., co może być bardzo silnym argumentem. Oracle ma dość obszerną listę zmian , ale jest dość długa, więc podsumuję jak najwięcej.
Funkcje językowe obejmują:
Map<String, String> myMap = new HashMap<String, String>();
można zredukować doMap<String, String> myMap = new HashMap<>()
. Kompilator może wnioskować o typach ogólnych potrzebnych po prawej stronie od lewej, więc twój kod jest nieco krótszy i szybszy do odczytania..equals()
metody zamiast==
.Throwable.getSuppressed
.int n = 1000000000
można przekształcić w znacznie bardziej czytelneint n = 1_000_000_000
, co znacznie łatwiej jest analizować jako miliard, a trudniej wpisać niepoprawnie bez zauważenia. Również binarne literały są dozwolone w formie0b10110101
, dzięki czemu kod, który działa z polami bitowymi, jest nieco łatwiejszy do odczytania.Każda z tych zmian jest czymś, na czym twój menedżer może nie obchodzić bezpośrednio, ale ułatwiają one pisanie poprawnego kodu bez większego wysiłku i przemyśleń, uwalniając umysł od skupienia się na logice, której próbujesz. do implementacji, a także ułatwiają późniejsze czytanie kodu, dzięki czemu debugowanie jest trochę szybsze.
Po stronie interfejsu API wystąpiły również liczne aktualizacje interfejsu API:
źródło
String.equals
metody” (z dokumentu, do którego się łączysz). W rzeczywistości kompilator może dowolnie optymalizować, abyString.equals
nie był używany ... pod warunkiem, że efekt netto jest taki sam. (I spodziewałbym się, że użyje goString.hashcode
powyżej pewnej liczby przypadków przełączników.)try-with-resources to funkcja, którą warto zaktualizować do wersji Java 7 dla samego siebie. Wycieki zasobów / wycieki pamięci stanowią duże ryzyko w rozwoju Java, a TWR znacznie je zmniejsza.
Dodam, że nowa abstrakcja pliku NIO.2 i funkcje asynchroniczne również są warte przejścia, jeśli twoja aplikacja ma funkcje we / wy plików / sieci.
źródło
Może istnieć powód, dla którego nie powinieneś przestawiać się na Javę 7: Jeśli musisz użyć maszyny wirtualnej Oracle, a twoje oprogramowanie albo działa na wbudowanym sprzęcie, albo będziesz go dystrybuować ze sprzętem wbudowanym: Oracle zmieniło licencję JRE, aby nie była licencjonowana, jeśli powyżej warunki są spełnione; musisz kupić licencję wbudowaną Java SE. Zobacz Co oznacza „system ogólnego zastosowania” dla Java SE Embedded?
źródło