web-dev-qa-db-ja.com

Java 6からJava 7への移行を正当化する方法は?

Java 6 から Java 7 に移行しました。プロジェクトは予定より遅れており、削除されるリスクがあります。その場合、プロジェクトは引き続き使用しますJava 6。

Java 7では、JDK 7を使用することが重要であるということで、マネージャーに戻ることができると確信していますか?Oracleで強調できるバグ修正を探していますJava 7(Java 6に関して)。セキュリティ、パフォーマンスの修正 Java 2D /printingなどがより販売されますたとえば、コンパイラの修正はあまり役に立ちません。

[ Oracle導入ガイド 、バグデータベース、 Questions スタックオーバーフローのような多くのサイトを通過しています]。

更新:回答ありがとうございます。更新を次のリリースに変更しました。一番近いのはセキュリティです。最高投票数の回答を受け入れる。

28
Jayan

Java 6は 今年2月にEOLに達しました であり、非常に高額なエンタープライズサポートを購入しない限り、パブリックアップデート(セキュリティを含む)を受け取りません。

それが必要なすべての理由でなければなりません。

さらに、圧倒的な証拠は、Javaランタイムの後方互換性が優れていることを示唆しています。たぶん、Java 6インストールをJava 7とすべてのアプリケーションが問題なく動作し続けることはもちろんですが、これは保証されておらず、実際に問題がないことを確認するための広範なテストが推奨されます。

44

一般に、プログラマーが扱いやすくするために、かなり広範囲にわたる変更がいくつかあります。上司はそのようなことをあまり気にしないかもしれませんが、プログラマーがボイラープレートコードについて考える時間を減らすので、実装しているものの実際の目標を考える時間を増やし、効率を上げ、バグを減らす必要があります。これはvery強力な引数になる可能性があります。 Oracleにはかなり広範囲にわたる変更のリストがあります ですが、かなり長いので、できるだけまとめます。

言語機能は次のとおりです。

  • Genericsではボイラープレートが少なくなります。 コードMap<String, String> myMap = new HashMap<String, String>();Map<String, String> myMap = new HashMap<>()に削減できます。コンパイラは、左側から右側に必要なジェネリック型を推測できるため、コードが少し短くて読みやすくなります。
  • 現在、stringはswitchステートメントで機能します 、_==_の代わりに.equals()メソッドのセマンティクスを使用します。
  • try-with-resourcesを使用した自動リソース管理。 これにより、コードがよりクリーンになりますが、古いスタイルのtry/finallyベースのコードよりも優れています。例外がtryステートメントでスローされ、その後、クローズ中に別の例外がスローされる場合、従来のtry/finallyステートメントを使用するコードは元の例外を完全に失い、finallyブロックでスローされた例外のみを渡します。ランタイムは、try-with-resourcesステートメントで、close()呼び出しがスローした例外を抑制し、最初の例外が最初のすべての問題を引き起こしたものであると想定して、元の例外をスタックにバブリングします場所。さらに、この抑制により、ガベージコレクターへの他の例外を破棄する代わりに、_Throwable.getSuppressed_を使用してクローズスロー例外を取得できます。
  • 数値リテラルを読みやすくすることができます。 すべての数値リテラルでアンダースコアを使用できます 、つまり_int n = 1000000000_のようなものは、より読みやすい_int n = 1_000_000_000_にすることができます。気付かずに間違って。また、 バイナリリテラルが許可されます _0b10110101_の形式で、ビットフィールドで動作するコードを少し読みやすくします。
  • 同じcatchステートメントで複数の例外タイプを処理する を実行して、コードの重複を減らし、後で簡単にリファクタリングできるようにすることができます。

これらの変更はすべて、マネージャーが直接気にする必要のないものですが、それほど多くの労力と考えなしに正しいコードを書くのが少し簡単になり、心があなたがしようとしている実際のロジックにもう少し集中することができます。実装します。また、後でコードを読むのが少し簡単になり、デバッグが少し速くなります。

API側では、いくつかのAPI更新も行われています。

  • Security-wise 、暗号化が進むにつれて、いくつかの暗号化方式が追加/廃止されました。
  • ファイルIO が変更されました。( ただし、これはより良いリンクかもしれませんが )いくつかの場所でより良い抽象化を追加します。私は個人的に新しいIOのものに飛び込んだことはありませんが、非常に便利なオーバーホールのように見え、それほど苦労することなくファイルシステムを操作することがはるかに簡単になります。
  • nicodeのサポート は、他の多くの国際化拡張機能とともに、Unicode 6.0までです。
  • Java2D 、あなたの質問で述べたように、改善されました。 Linuxフォントのサポートの向上、最新のマシンでのX11レンダリングの向上、チベット文字の処理。
29
Billy Mailman

try-with-resources は、Java 7にアップグレードする価値のある機能です。リソースリーク/メモリリークはJava開発における大きなリスクであり、TWRはそのリスクを大幅に軽減します。

アプリケーションにファイル/ネットワークI/O機能がある場合は、新しい NIO.2 ファイル抽象化と非同期機能も追加する価値があります。

8
Martijn Verburg

notに切り替える必要がある理由があるかもしれませんJava 7:OracleのVMを使用する必要があり、ソフトウェアが組み込みハードウェアまたは組み込みハードウェアで配布します。OracleはJREのライセンスを変更し、上記の条件が満たされた場合にnotのライセンスになるようにしました。 buy a Java SE組み込みライセンスが必要です。 を参照してください。「汎用システム」はJava SE Embeddedの意味を教えてください。