Java 8について聞いたことはすべて、Lambdaの表現を中心としています。しかし、それはJava 8の一部にすぎません。Java8には多くの新機能があります。いくつかの強力な新しいクラスと構文、そして最初から持つべきものです。
知る価値があると思われる10の重要な機能を紹介します。少なくとも1つまたは2つはあなたが試してみるためにそこにいるので、始めましょう!
1。デフォルトメソッド
Java言語の新しく追加された機能は、メソッドボディ(デフォルトメソッドと呼ばれる)をインターフェイスの方法に追加できることです。これらの方法は、このインターフェイスを実装するクラスに暗黙的に追加されます。
これにより、コードを壊さずに既存のライブラリに新しい機能を追加できます。これは明らかに改善です。しかし、一方で、これはインターフェイスが契約を定義するために使用され、クラスは具体的な実装を定義するために使用されるため、インターフェイスとクラスの境界を難読化します。プラス面では、インターフェイスをエレガントな方法でよりスマートにし、ライブラリの重複と拡張を回避します。しかし、悪い面では、インターフェイスメソッドがこれを照会し、コンクリートクラスに変換することが後で確認されます。震え…。
2。プロセス終了
外部プロセスを開始することは、あなたが行うことの半分です - プロセスがクラッシュ、ハング、または100%CPUを消費する場合、戻ってデバッグする必要があります。プロセスクラスには、手に負えないプロセスを制御するのに役立つ2つの新しい方法が装備されています。
1つ目はISALIVE()です。これにより、プロセスが完了するのを待たずにプロセスがまだ実行されているかどうかを確認できます。 2番目のより強力な方法は、Desistolibly()です。これにより、タイミングを合わせた、または不要になったキルプロセスを強制することができます。
3。StampedLocks
今はエキサイティングなものがあります。コードを同期するのが好きな人はいません。アプリケーションのスループット(特にスケーラブルなアプリケーション)を削減するか、アプリケーションが切れる原因となるのは犯人です。それでも、ある時点で選択肢がありません。
マルチスレッドの同期方法で重要なリソースへのアクセスを制限する多くの方法があります。これらの中で最も有名なのは、読み取りワイトロック(readwritelock)とそれに関連する実装です。複数のスレッドが同じリソースにアクセスできるようにし、リソースを動作させるスレッドをブロックすることにより、リソース競争を削減します。理論的にはこれは良いように聞こえますが、実際には、このロックは非常に遅いです。特に、多くの書き込みスレッドがある場合です。
注:読み取りワイトロックは、リソース訪問者を読者とライターの2つのカテゴリに分割します。読者はリソースで読み取り専用操作を実行し、ライターはリソースを操作できます。
Java 8は、Stampedlockと呼ばれる新しい読み取り洗浄ロックを紹介します。このロックはより速いだけでなく、楽観的なロックの強力なセットを提供します。これにより、最低コストでリーダーロックを取得でき、選択中に書き込み操作を望まないことさえあります。選択が終了した後、ロックを照会して、選択中に書き込み操作があるかどうかを確認できます。その場合、再試行するか、ロックを更新するか、あきらめるかを選択できます。
このロックは非常に強力なツールであり、それを説明するための特別な記事が必要です。私はこの新しいことにとても興奮していたので、私はめまいがよく、よくできていました!
詳細については、こちらを参照してください
4。同時アドレス
これは、マルチスレッドアプリケーションで働いている人にとっては別の小さな赤ちゃんです。これは、MultiThreadedカウンター用のシンプルで効率的な新しいAPIであり、AtomicIntegerを使用するよりも速いです。とてもかっこいい!
5。オプションの値
ああ、Null Pointer、すべてのJava開発者の悪夢。最初から(または少なくとも1965年に)、それはおそらく最も人気のある例外でした。
スケールとハッシェルから描画するJava 8には、nullである可能性のある参照をカプセル化するためのオプションと呼ばれる新しいテンプレートがあります。 NULLを終了することは決して銀の弾丸ではありません。APIデザイナーがコードレベルから(ドキュメントレベルではなく)、null値がメソッドに渡されるか、メソッドから返されて発信者にnull値を準備できるようにする方法です。したがって、これは新しいAPIの下でのみ機能し、発信者が参照がカプセル化を逃れさせないと仮定すると、安全でない控えめな宣告が生じます。
私はこの機能と非常に対立していると言わざるを得ません。一方では、Nullに大きな問題があるので、Nullが発生する前にすべてを行う傾向があります。しかし、一方で、私はそれが成功するとは思わない。これは、オプションを使用するには会社全体からの絶え間ない努力が必要ですが、直接的な価値がないためです。決定的でない限り、放棄される可能性があります。
オプションの詳細については、ここをクリックしてください
6。何でも注釈を付けます
もう1つの小さなJava言語の改善は、コード内のほとんどすべてに注釈を追加できることです。過去には、注釈はクラスまたはメソッド宣言にのみ追加できました。 Java 8を使用した注釈は、指定されたタイプに値を渡すだけでなく、新しいオブジェクトにスペースを割り当てる場合でも、変数およびパラメーター宣言に追加できます。これは、Java言語をより友好的で集中的にすることの一部です(JavaドキュメントツールとAPIの改善とともに)FindBugsなどのウィザードツールを通じて。これは素晴らしい機能ですが、Java 7で導入されたInvokedynamicのようなものであり、その本当の価値はコミュニティがそれを行うことです。
7。オーバーフロー操作
ここに、最初からコアライブラリに含める必要がある一連の方法があります。私のお気に入りの習慣の1つは、Intが2^32を超えたときにオーバーフローをデバッグし、この悪名高いバグをランダムに作成し続けることです(「どうやってこの奇妙な価値を得たのですか?」など)。
今回は銀の弾丸はありませんが、オーバーフローがオーバーフローを暗黙的に引き起こす標準 +/*演算子よりも寛容な方法でオーバーフローが発生する場合に例外を操作する一連の機能があります。
8。フォルダートラバーサル
反復ディレクトリツリーの内容は、Google検索で非常に早い段階で表示されています(この場合、Apache.fileutilsを使用する場合があります)。 Java 8
ファイルに10個の新しいメソッドが追加されました。私のお気に入りはwalk()です。
ディレクトリ構造の内容。
9。強い乱数生成
パスワードとキーの脆弱性についての今日の講演は必須です。プログラムのセキュリティは難しい問題であり、間違いを犯すのは簡単です。これも私が好きなものです
JVMで最も強い乱数ジェネレーターを自動的に選択できる新しいSecurerandom.getInstancestrong()メソッドの理由。それは減少します
発電機の障害または弱い発電機の可能性はデフォルトで取得され、キーまたは暗号化の値が簡単に割れる可能性があります。
10。date.toinstant()
Java 8は、真新しいデートタイムAPIを紹介します。既存のAPIは良くないため、これは非常に理解できます。現在、Jodaは長年にわたってJava Date Time APIに焦点を合わせて侵入しています。ただし、新しいAPIがあっても、まだ大きな問題があります。古いAPIを使用するコードとライブラリがたくさんあります。
私たちは皆、この問題に直面していることを知っているので、どうすればよいですか?
Java 8は非常にエレガントに行われているため、日付クラスに新しいメソッドが追加され、新しいAPIに変換されました。古い日付APIを使用しても(近い将来に同じ)、新しいAPIにすばやくアップグレードすることができます。
この記事には、言及すべきではない他の特性があると思いますか、それとも分析に反対しますか?コメントしてください - これが投稿の目的です!
上記は、Java 8の新機能に関する情報の編集です。将来、関連情報を追加し続けます。このウェブサイトへのご支援ありがとうございます!