検索
ホームページJava&#&チュートリアルSpring 4 でサポートされる Java8 機能の詳細な紹介 (図)

Spring Framework 4 は Java 8 言語と API 機能をサポートしています。この記事では、Spring 4 の新しい Java 8 機能のサポートに焦点を当てます。最も重要なものは、ラムダ 、メソッド 参照 、JSR-310 の日付と時刻、および反復可能なアノテーションです。以下のエディターで見てみましょう

Spring Framework 4 は Java 8 言語と API 関数をサポートしています。この記事では、Spring 4 の新しい Java 8 機能のサポートに焦点を当てます。最も重要なものは、ラムダ式、メソッド参照、JSR-310 の日付と時刻、反復可能なアノテーションです。

ラムダ式

Spring のコード ベースでは、Java 8 の多数の関数インターフェイスが使用されています。ラムダ式を使用すると、よりクリーンでコンパクトなコードを作成できます。関数型インターフェイスの オブジェクト が予期されるときはいつでも、ラムダ式を提供できます。次に進む前に、まず関数インターフェイスについて学びましょう。

関数型インターフェース

単一の抽象メソッドを持つインターフェースは関数型インターフェースと呼ばれます。 JDK の関数インターフェイスの例をいくつか示します。

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

Comparator は、抽象非オブジェクト メソッドを 1 つだけ持つ関数です。 2 つの抽象メソッドが宣言されていますが、equals はオブジェクトに対応するパブリック メソッドであるためカウントから除外されます。オブジェクト クラス メソッドが 1 つあり、非オブジェクト メソッドが存在しないインターフェイスは、機能インターフェイスではありません。

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

インターフェイスが抽象的な非オブジェクト クラス メソッドを持ち、独自のオブジェクト クラス メソッドを持つ非関数型インターフェイスから拡張されている場合、そのインターフェイスは関数型インターフェイスと呼ばれます。

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

Spring Framework の関数型インターフェイスの例:

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

@FunctionalInterface アノテーションはインターフェイス宣言の先頭の宣言で使用できますが、必須ではありません。このアノテーションは、インターフェースが有効な関数インターフェースであるかどうかを検出するためにコンパイラーによって使用されます。インターフェイス内で複数の単一抽象メソッドを定義しようとすると、コンパイラはエラーをスローします。

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

関数記述子

インターフェースの関数記述子は、インターフェースの抽象メソッドのメソッドの型です。メソッドのタイプには、パラメータのタイプ、戻り値のタイプ、および throws 句が含まれます。

例:

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

ラムダ式の書き方

ラムダ式の構文は 3 つの部分に分割できます:

  • 矢印 (–>)

  • パラメータリスト: a Lambda 式には 0 個以上のパラメータを含めることができます。 例:

  • () → { System.out.println(“ No arguments”); 
    } (String arg) → { System.out.println(“ One argument : ”+arg); 
    } (String arg1, Integer arg2) 
    → { System.out.println(“Two arguments : ”+arg1+” and ”+arg2); }
  • 式本体: 単一の式またはコード ブロックにすることができます。単一の式が単純に評価されて返されます。 例: (String arg) → { System.out.println(“ 1 つの引数 : ”+arg) } 式本体(Body)内にステートメントブロックがある場合はメソッド本体と判断され、以降ブロックが実行されます。 隠された return ステートメントにより、呼び出し元に制御が与えられます。

次に、ラムダ式の使用方法を見てみましょう:

例 1:

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

// ラムダ式の使用

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

例 2:

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

//ラムダ式

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

Spring のコールバック関数を通じて Lambda 式を使用できます。たとえば、ConnectionCallback を使用して特定の JDBC 接続のリストを取得する場合は、次のステートメントのように記述できます: jdbcTemplate.execute(connection -> connection.getCatalog())

メソッド リファレンス

関数インターフェースはメソッド参照を使用して実装することもできます。メソッド参照はメソッドまたはコンストラクターを参照しますが、それらを呼び出すことはありません。メソッド参照はラムダ式に似ていますが、メソッド参照は既存のクラスのメソッドを参照するのに対し、ラムダは匿名メソッドを関数インターフェイスのインスタンスとして定義します。

Java 8 では、新しいパッケージに、ラムダ式とメソッド参照によく使用される関数インターフェイス (java.util.function) が含まれています。

Date Time API

Java の既存の Date and Time クラスには複数の問題があります。 Date クラスと Calendar クラスの最大の問題の 1 つは、それらがスレッドセーフではないことです。開発者は、日付処理コードを作成するとき、同時実行性の問題に特に注意する必要があります。 Date クラスは国際化もサポートしていないため、タイム ゾーンもサポートしていません。開発者は、さまざまなタイムゾーンをサポートするために大量のコードを作成する必要があります。

Date および Time クラスも API 設計が不十分です。 java.util.Date の月は 0 から始まり、日は 1 から始まり、年は 1900 から始まります。一貫性が欠けています。 Date and Time クラスに関するこれらおよびその他のいくつかの問題は、Java 8 の新しい Date and Time API で解決されています。

java.time パッケージの新しい日付と時刻 API の重要なクラスは、LocalDate、LocalTime、および ZonedDateTime です。

LocalDate と LocalTime

LocalDate の日付を表すときのデフォルトの形式は YYYY-MM-DD で、時間はありません。これは不変クラスです。 now() メソッドを使用して現在の日付を取得できます。

新しい LocalDate インスタンスの作成例:

//現在の日付を取得します

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

年、月、日のパラメーターを入力して新しい LocalDate インスタンスを作成することもできます。

// April 1, 2016

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

LocalTime は日付のない時間を表し、変更されません。時刻のデフォルトの形式は hh:mm:ss.zzz です。

新しい LocalTime インスタンスの作成例:

//現在時刻を取得します

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

// 18:30:30

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

デフォルトでは、LocalDate クラスと LocalTime クラスはデフォルトでシステム クロックを使用します。タイムゾーン。これらのクラスは、overloaded new() メソッドを介したタイムゾーンの変更のサポートも提供します。 zoneid を渡すことで、特定のタイムゾーンの日付を取得できます。

例:

// コルカタ (インド) の現在の現地日付

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

さらに、デフォルト形式 yyyy-MM-ddTHH:MM:ss.zzz で日付と時刻を組み合わせるクラス LocalDateTime があります。 ·。

//現在の日付と時刻

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

// 2016-04-01 13:30

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

ZonedDateTime

これは、タイムゾーン情報時間を含む日付と時刻を表すために使用される不変クラスです。このクラスのインスタンスを使用して、世界の一部での会議などの特定の イベント を表すことができます。

// 現在の時刻はシステム時刻とデフォルトゾーンを使用します

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

// 現在の時刻は特定のタイムゾーンのシステムクロックを使用します

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

Spring 4 は、Java 8 の日付とデフォルトゾーンをサポートする変換フレームワークを提供しますすべてのクラスの時間 API 部分。 Spring 4 は、2016-9-10 の string を受け取り、それを Java 8 LocalDate のインスタンスに変換できます。 Spring 4 では、@DateTimeFormat アノテーションを介した Java 8 日付/時刻フィールドのフォーマットもサポートしています。 @DateTimeFormat は、フィールドを日付時刻としてフォーマットする必要があることを宣言します。

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

アノテーションの重複

Java 8 より前では、同じタイプの複数のアノテーションを宣言または型 (クラスやメソッドなど) に追加することは許可されませんでした。回避策として、開発者はそれらを 1 つのコンテナ アノテーションに結合する必要がありました。

例:

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

アノテーションが重複すると、コンテナーアノテーションを明示的に使用せずに同じコードを書き直すことができます。ここではコンテナ アノテーションは使用されていませんが、Java コンパイラは 2 つのアノテーションをコンテナにパッケージ化する役割を果たします。注釈を付けるための反復可能なアノテーション、または反復アノテーション タイプ シリーズ

属性

を使用してアノテーションを作成します。

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

ステップ 1: 繰り返しのアノテーション タイプを宣言します:

ステップ 2: コンテナー アノテーション タイプを宣言します。

実装全体は次のとおりです:

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

実行時にアノテーション情報を取得するには、 @Retention(RetentionPolicy.RUNTIME) アノテーションを渡すだけです。

注釈の取得

Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

getAnnotationsByType() または getDeclaredAnnotationsByType() は、注釈にアクセスするための Reflection API の新しいメソッドです。

アノテーションには、getAnnotation() または getDeclaredAnnotation() を使用してコンテナーアノテーションを通じてアクセスすることもできます。 Spring 4 でサポートされる Java8 機能の詳細な紹介 (図)

結論

Spring 4 は Java 6 および Java 7 でも実行されます。 Spring では多くの関数型インターフェイスが使用されるため、Java 8 と Spring 4 では、Lambda 式と関数型インターフェイスを使用して、よりクリーンでコンパクトなコードを作成できるようになります。

以上がSpring 4 でサポートされる Java8 機能の詳細な紹介 (図)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Javaがクロスプラットフォームデスクトップアプリケーションを開発するための人気のある選択肢なのはなぜですか?Javaがクロスプラットフォームデスクトップアプリケーションを開発するための人気のある選択肢なのはなぜですか?Apr 25, 2025 am 12:23 AM

javaispopularforsoss-platformdesktopapplicationsduetoits "writeonce、runaynay" philosophy.1)itusesbytecodatiTatrunnanyjvm-adipplatform.2)ライブラリリケンディンガンドジャヴァフククレアティック - ルルクリス

Javaでプラットフォーム固有のコードを作成する必要がある場合がある状況について話し合います。Javaでプラットフォーム固有のコードを作成する必要がある場合がある状況について話し合います。Apr 25, 2025 am 12:22 AM

Javaでプラットフォーム固有のコードを作成する理由には、特定のオペレーティングシステム機能へのアクセス、特定のハードウェアとの対話、パフォーマンスの最適化が含まれます。 1)JNAまたはJNIを使​​用して、Windowsレジストリにアクセスします。 2)JNIを介してLinux固有のハードウェアドライバーと対話します。 3)金属を使用して、JNIを介してMacOSのゲームパフォーマンスを最適化します。それにもかかわらず、プラットフォーム固有のコードを書くことは、コードの移植性に影響を与え、複雑さを高め、パフォーマンスのオーバーヘッドとセキュリティのリスクをもたらす可能性があります。

プラットフォームの独立性に関連するJava開発の将来の傾向は何ですか?プラットフォームの独立性に関連するJava開発の将来の傾向は何ですか?Apr 25, 2025 am 12:12 AM

Javaは、クラウドネイティブアプリケーション、マルチプラットフォームの展開、および言語間の相互運用性を通じて、プラットフォームの独立性をさらに強化します。 1)クラウドネイティブアプリケーションは、GraalvmとQuarkusを使用してスタートアップ速度を向上させます。 2)Javaは、埋め込みデバイス、モバイルデバイス、量子コンピューターに拡張されます。 3)Graalvmを通じて、JavaはPythonやJavaScriptなどの言語とシームレスに統合して、言語間の相互運用性を高めます。

Javaの強力なタイピングは、プラットフォームの独立性にどのように貢献しますか?Javaの強力なタイピングは、プラットフォームの独立性にどのように貢献しますか?Apr 25, 2025 am 12:11 AM

Javaの強力なタイプ化されたシステムは、タイプの安全性、統一タイプの変換、多型を通じてプラットフォームの独立性を保証します。 1)タイプの安全性は、コンパイル時間でタイプチェックを実行して、ランタイムエラーを回避します。 2)統一された型変換ルールは、すべてのプラットフォームで一貫しています。 3)多型とインターフェイスメカニズムにより、コードはさまざまなプラットフォームで一貫して動作します。

Javaネイティブインターフェイス(JNI)がプラットフォームの独立性をどのように妥協できるかを説明します。Javaネイティブインターフェイス(JNI)がプラットフォームの独立性をどのように妥協できるかを説明します。Apr 25, 2025 am 12:07 AM

JNIはJavaのプラットフォームの独立を破壊します。 1)JNIは特定のプラットフォームにローカルライブラリを必要とします。2)ローカルコードをターゲットプラットフォームにコンパイルおよびリンクする必要があります。3)異なるバージョンのオペレーティングシステムまたはJVMは、異なるローカルライブラリバージョンを必要とする場合があります。

Javaのプラットフォームの独立性を脅かしたり強化したりする新しいテクノロジーはありますか?Javaのプラットフォームの独立性を脅かしたり強化したりする新しいテクノロジーはありますか?Apr 24, 2025 am 12:11 AM

新しいテクノロジーは、両方の脅威をもたらし、Javaのプラットフォームの独立性を高めます。 1)Dockerなどのクラウドコンピューティングとコンテナ化テクノロジーは、Javaのプラットフォームの独立性を強化しますが、さまざまなクラウド環境に適応するために最適化する必要があります。 2)WebAssemblyは、Graalvmを介してJavaコードをコンパイルし、プラットフォームの独立性を拡張しますが、パフォーマンスのために他の言語と競合する必要があります。

JVMのさまざまな実装は何ですか、そしてそれらはすべて同じレベルのプラットフォームの独立性を提供しますか?JVMのさまざまな実装は何ですか、そしてそれらはすべて同じレベルのプラットフォームの独立性を提供しますか?Apr 24, 2025 am 12:10 AM

JVMの実装が異なると、プラットフォームの独立性が得られますが、パフォーマンスはわずかに異なります。 1。OracleHotspotとOpenJDKJVMは、プラットフォームの独立性で同様に機能しますが、OpenJDKは追加の構成が必要になる場合があります。 2。IBMJ9JVMは、特定のオペレーティングシステムで最適化を実行します。 3. Graalvmは複数の言語をサポートし、追加の構成が必要です。 4。AzulzingJVMには、特定のプラットフォーム調整が必要です。

プラットフォームの独立性は、開発コストと時間をどのように削減しますか?プラットフォームの独立性は、開発コストと時間をどのように削減しますか?Apr 24, 2025 am 12:08 AM

プラットフォームの独立性により、開発コストが削減され、複数のオペレーティングシステムで同じコードセットを実行することで開発時間を短縮します。具体的には、次のように表示されます。1。開発時間を短縮すると、1セットのコードのみが必要です。 2。メンテナンスコストを削減し、テストプロセスを統合します。 3.展開プロセスを簡素化するための迅速な反復とチームコラボレーション。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境