JavaRush /Java Blog /Random-JA /聞いたことのない Java 8 の 10 の機能。
Vash_the_Stampede
レベル 11

聞いたことのない Java 8 の 10 の機能。

Random-JA グループに公開済み
ラムダ、ラムダ、ラムダ。Java 8 について話すときに聞かれるのはこれだけです。しかし、それはほんの一部にすぎません。Java 8 には多くの新機能があり、強力な新しいクラスやイディオムもあれば、最初からあるべきものもあります。間違いなく知っておく価値のある小さな宝石だと私が考える 10 個の新機能に移りたいと思います。その中には、試してみたいものが少なくとも 1 つまたは 2 つはあるはずです。早速始めてみましょう。 1) デフォルトのメソッド。 Java 言語の新機能として、メソッド本体をインターフェイス ( デフォルト メソッド) に追加できるようになりました。これらのメソッドは、これらのインターフェイスを実装するすべてのクラスに無条件に追加されます。これにより、古いコードを壊すことなく、既存のライブラリに新しい機能を追加する機会が得られます。それは間違いなくプラスです。その一方で、規則として特定の条件に従うことを義務付けるインターフェイスと、そのプライベート実装としてそれらに従うクラスとの間の境界線が非常に曖昧になります。(正しい) 右手では、これはインターフェイスをよりスマートにし、繰り返しを避け、ライブラリを拡張するためのエレガントな方法になる可能性があります。悪い人の手に。これを呼び出して具体的な型にキャストするインターフェース内のメソッドが間もなく登場する予定です。Brrr.... 2) プロセスを停止します。 追加のプロセスを開始することは、プロセスが (クラック) (クラッシュ) 中止、ハング (ハング)、または CPU を 100% 使用したときに、デバッグするために戻ってくる (デバッグ) ことを半分わかっていて行うことの 1 つです。Process クラスには、手に負えないプロセスの制御に役立つ 2 つの新しいメソッドが追加されました。1 つ目の isAlive() を使用すると、プロセスを待つことなく、プロセスが実行中かどうかを簡単に確認できます。2 番目のより強力な (警告!) は destroyForcibly()です。これを使用すると、(待機中かどうかにかかわらず) 時間を超過したプロセス、または不要になったプロセスを (恥知らずに) 強制的に (kill) 停止できます。 3) スタンプドロック。 ここからは本当にエキサイティングな話です。コードを同期することを好む人はいません。これは、アプリケーションのパフォーマンス (特に大規模な場合) を低下させたり、さらに悪いことにアプリケーションをフリーズさせたりする確実な方法です。それでも、選択の余地がない場合もあります。リソースへのマルチスレッド アクセスを同期するための慣用句は数多くあります。最も推奨されるものの 1 つは、ReadWriteLock および関連する実装です。このイディオムは、リソースを操作するスレッドのみをブロックしながら、複数のスレッドがリソースを使用できるようにすることで競合を軽減します。それは素晴らしく聞こえますが、実際には、特に多数の書き込みスレッドの場合、このロックは非常に 遅くなります。 これは非常に悪いことであることが判明したため、Java 8 ではStampedLockと呼ばれる新しい RWLock が導入されました。このロックは高速であるだけでなく、楽観的ロックのための強力な API も提供します。これにより、コードの重要なセクションで書き込み操作が発生しないことを期待して、低コストで読み取りロックを取得できます。セクションの最後で、その間に録音が行われたかどうかをロックに尋ねます。その場合、再試行するか、ロックをエスカレートするか、または諦めるかを決定できます。このロックは強力なツールであり、それ自体について詳しく説明する価値があります。私はこの新しいおもちゃに目がくらむほど興奮しています。素晴らしい!さらに、読むこともできます ここ4) 競合するレコーダー。 これは、マルチスレッド アプリケーションを実行している人にとって、もう 1 つの小さな宝石です。複数のスレッドからカウンターを読み書きするための、シンプルで効率的な 新しい API 。場合によっては、AtomicInteger を使用するよりも高速になることもあります。めっちゃすごい! 5) オプション (またはオプション) の値。 ああ、null ポインター、すべての Java 開発者にとって頭の痛い問題です。おそらくすべての例外の中で最も人気のあるもので、非常に早い時期から存在しています。少なくとも 1965 年以降は。Scala と Haskell から借用した Java 8 には、null を指定できる参照をラップするための、Optional と呼ばれる新しいパターンがあります。これは決して null をなくす特効薬ではなく、API 設計者が (ドキュメントではなく) コード レベルで、null 値を返すこともメソッドに渡すこともできること、呼び出し元は次のことを行う必要があることを示す手段です。それに備えてください。したがって、これは新しい API でのみ機能します。ただし、呼び出し側が参照がラッパーからエスケープすることを許可しておらず、安全でない逆参照が行われる可能性があります。この機能についてはかなり曖昧だと言わざるを得ません。一方で、null は依然として大きな問題であるため、それを解決するために行われたすべてのことに感謝しています。一方で、私はこれが成功するかどうかかなり懐疑的です。Optionalの利用には全社の継続的な取り組みが必要であり、即効性が低いためです。強力な取り締まりがなければ、道路の左側に残る可能性が高い。 オプションについて詳しくは、こちらをご覧ください6) すべてに注釈を付けます。Java 言語におけるもう 1 つの小さな進歩は、コード内の ほぼすべてに 注釈を追加できることです。以前は、アノテーションはクラスやメソッド宣言などにのみ追加できました。Java 8 以降、値を特定の型にキャストするとき、または新しいオブジェクトを割り当てるときに、変数およびパラメーターの宣言にアノテーションを追加できます。これは、この言語を静的分析および測定ツール (FindBugs など) にさらに使いやすくするための集中的な取り組み (JavaDoc ツールおよび API の改善と併せて) の一環です。 これは素晴らしい機能ですが、Java 7 で導入されたinvokeDynamicと同様に、その真の価値は社会がそれをどう扱うかによって決まります。 7) オーバーフロー演算。 さて、ここに 一連のメソッドがあります、これは初日からコア ライブラリの一部であるはずです。私の一番の趣味は、int が 2^32 を超えた場合の数値オーバーフローをデバッグし、最も厄介で最も予期しないエラー (つまり、「一体どうやってこの奇妙な値を取得するのか?」) を作成することです。繰り返しますが、ここにも特効薬はありませんが、無条件にオーバーフローする標準の +/* 演算子よりも寛容ではない方法で、オーバーフロー時にスローされる数値を操作するための関数がたくさんあります。 8) カタログをざっと見てみましょう。 ディレクトリ ツリーの内容を反復処理することは、長い間、人々が Google 検索することの 1 つでした (その場合、おそらく Apache.FileUtils を使用するように勧められるでしょう)。Java 8 では、 Filesクラスが刷新され、10 個の新しいメソッドが追加されました。私のお気に入りは walk()です。これは、ディレクトリ構造の内容を反復処理する遅延スレッド (大規模なファイル システムにとって重要) を作成します。 9) 強力なラ​​ンダム生成。 現在、パスワードとキーの脆弱性についての話題が尽きません。ソフトウェア セキュリティは複雑なビジネスであり、エラーが発生しやすいものです。だからこそ、私は新しい SecureRandom メソッドが気に入っています。 getinstanceStrong()。Java 仮想マシンで使用できる最も強力なランダム ジェネレータを自動的に選択します。これにより、キーや暗号化された値がハッキングされやすくなる、失敗したり、ジェネレーターが弱い可能性が低くなります。 10. Date.toInstant()。 Java 8 では、 日付と時刻に関するまったく新しい API が導入されています。既存のものはあまり良くないので、これはかなり理解できます。Joda は数年にわたり、基本的に日付と時刻の Java API を目指してきました。ただし、新しい API を使用したとしても、古い API を使用するコードとライブラリが大量に存在するという大きな問題が 1 つ残っています。そして私たちは皆、彼らがここに留まり続けることを知っています。それで、どうしますか? これを実現するために、Java 8 では、Date クラスにtoInstant()という新しいメソッドを追加して、Date クラスを新しい API に変換するという、かなり洗練されたことを行いました。これにより、古い日付の API を使用するコードを使用している場合でも、新しい API にすばやくジャンプできます (今後もそうし続けます)。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION