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 の関数インターフェイスの例をいくつか示します。
Comparator は、抽象非オブジェクト メソッドを 1 つだけ持つ関数です。 2 つの抽象メソッドが宣言されていますが、equals はオブジェクトに対応するパブリック メソッドであるためカウントから除外されます。オブジェクト クラス メソッドが 1 つあり、非オブジェクト メソッドが存在しないインターフェイスは、機能インターフェイスではありません。
インターフェイスが抽象的な非オブジェクト クラス メソッドを持ち、独自のオブジェクト クラス メソッドを持つ非関数型インターフェイスから拡張されている場合、そのインターフェイスは関数型インターフェイスと呼ばれます。
Spring Framework の関数型インターフェイスの例:
@FunctionalInterface アノテーションはインターフェイス宣言の先頭の宣言で使用できますが、必須ではありません。このアノテーションは、インターフェースが有効な関数インターフェースであるかどうかを検出するためにコンパイラーによって使用されます。インターフェイス内で複数の単一抽象メソッドを定義しようとすると、コンパイラはエラーをスローします。
関数記述子
インターフェースの関数記述子は、インターフェースの抽象メソッドのメソッドの型です。メソッドのタイプには、パラメータのタイプ、戻り値のタイプ、および throws 句が含まれます。
例:
ラムダ式の書き方
ラムダ式の構文は 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:
// ラムダ式の使用
例 2:
//ラムダ式
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 インスタンスの作成例:
//現在の日付を取得します
年、月、日のパラメーターを入力して新しい LocalDate インスタンスを作成することもできます。
// April 1, 2016
LocalTime は日付のない時間を表し、変更されません。時刻のデフォルトの形式は hh:mm:ss.zzz です。
新しい LocalTime インスタンスの作成例:
//現在時刻を取得します
// 18:30:30
デフォルトでは、LocalDate クラスと LocalTime クラスはデフォルトでシステム クロックを使用します。タイムゾーン。これらのクラスは、overloaded new() メソッドを介したタイムゾーンの変更のサポートも提供します。 zoneid を渡すことで、特定のタイムゾーンの日付を取得できます。
例:
// コルカタ (インド) の現在の現地日付
さらに、デフォルト形式 yyyy-MM-ddTHH:MM:ss.zzz で日付と時刻を組み合わせるクラス LocalDateTime があります。 ·。
//現在の日付と時刻
// 2016-04-01 13:30
ZonedDateTime
これは、タイムゾーン情報時間を含む日付と時刻を表すために使用される不変クラスです。このクラスのインスタンスを使用して、世界の一部での会議などの特定の イベント を表すことができます。
// 現在の時刻はシステム時刻とデフォルトゾーンを使用します
// 現在の時刻は特定のタイムゾーンのシステムクロックを使用します
Spring 4 は、Java 8 の日付とデフォルトゾーンをサポートする変換フレームワークを提供しますすべてのクラスの時間 API 部分。 Spring 4 は、2016-9-10 の string を受け取り、それを Java 8 LocalDate のインスタンスに変換できます。 Spring 4 では、@DateTimeFormat アノテーションを介した Java 8 日付/時刻フィールドのフォーマットもサポートしています。 @DateTimeFormat は、フィールドを日付時刻としてフォーマットする必要があることを宣言します。
アノテーションの重複
Java 8 より前では、同じタイプの複数のアノテーションを宣言または型 (クラスやメソッドなど) に追加することは許可されませんでした。回避策として、開発者はそれらを 1 つのコンテナ アノテーションに結合する必要がありました。
例:
アノテーションが重複すると、コンテナーアノテーションを明示的に使用せずに同じコードを書き直すことができます。ここではコンテナ アノテーションは使用されていませんが、Java コンパイラは 2 つのアノテーションをコンテナにパッケージ化する役割を果たします。注釈を付けるための反復可能なアノテーション、または反復アノテーション タイプ シリーズ
属性を使用してアノテーションを作成します。
ステップ 2: コンテナー アノテーション タイプを宣言します。
実装全体は次のとおりです:
実行時にアノテーション情報を取得するには、 @Retention(RetentionPolicy.RUNTIME) アノテーションを渡すだけです。
注釈の取得getAnnotationsByType() または getDeclaredAnnotationsByType() は、注釈にアクセスするための Reflection API の新しいメソッドです。
アノテーションには、getAnnotation() または getDeclaredAnnotation() を使用してコンテナーアノテーションを通じてアクセスすることもできます。
結論
Spring 4 は Java 6 および Java 7 でも実行されます。 Spring では多くの関数型インターフェイスが使用されるため、Java 8 と Spring 4 では、Lambda 式と関数型インターフェイスを使用して、よりクリーンでコンパクトなコードを作成できるようになります。
以上がSpring 4 でサポートされる Java8 機能の詳細な紹介 (図)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java8 は、minus() メソッドを使用して 1 年前の日付または 1 年後の日付を計算し、1 年前の日付を計算します。 packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDateprevious Year=today.minus(1,ChronoUni

Java8 で 1 週間後の日付を計算する方法 この例では、1 週間後の日付を計算します。 LocalDate 日付には時間情報が含まれません。その plus() メソッドは、日、週、月を追加するために使用されます。これらの時間単位は ChronoUnit クラスで宣言されます。 LocalDate も不変型なので、戻った後に変数を使用して値を割り当てる必要があります。 packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo08{publicstaticvoidmain(String[

Java8 の Clock クラス Java8 では、現在のタイムスタンプ、つまり現在のタイムゾーンの日付と時刻の情報を取得するための Clock クラスが追加されています。以前に System.currentTimeInMillis() と TimeZone.getDefault() が使用されていた場合は、Clock に置き換えることができます。 packagecom.shxt.demo02;importjava.time.Clock;publicclassDemo10{publicstaticvoidmain(String[]args){//現在のタイムベースを返します

Java8 で現在のタイムスタンプを取得します。Instant クラスには、次に示すように、現在のタイムスタンプを返す静的ファクトリ メソッド now() があります。 Instanttimestamp=Instant.now();System.out.println("このインスタントの値は何ですか"+timestamp.t

Java 8 でのタイムゾーンの処理 Java 8 では、日付と時刻を分離するだけでなく、タイムゾーンも分離します。特定のタイム ゾーンを処理する ZoneId や、特定のタイム ゾーンの時間を表す ZoneDateTime など、一連の個別のクラスが追加されました。これは、Java8 より前の GregorianCalendar クラスによって行われていました。次の例は、このタイム ゾーンの時刻を別のタイム ゾーンの時刻に変換する方法を示しています。 packagecom.shxt.demo02;importjava.time.LocalDateTime;importjava.time.ZoneId;importjava.time.ZonedDateT

事前定義された書式設定ツールを使用して Java8 で日付を解析または書式設定する方法 packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.format.DateTimeFormatter;publicclassDemo17{publicstaticvoidmain(String[]args){StringdayAfterTommorrow="20180205 ";LocalDateformatted =LocalDate.parse

Java8 で今日の日付を取得する Java8 では、今日の日付を表すために LocalDate が使用されます。 java.util.Date とは異なり、日付のみが含まれ、時刻は含まれません。日付を表すだけが必要な場合は、このクラスを使用します。 packagecom.shxt.demo02;importjava.time.LocalDate;publicclassDemo01{publicstaticvoidmain(String[]args){LocalDatetoday=LocalDate.now();System.out.println("今日の日付:&q

Java8 で 2 つの日付が等しいかどうかを判断する packagecom.shxt.demo02;importjava.time.LocalDate;publicclassDemo04{publicstaticvoidmain(String[]args){LocalDatedate1=LocalDate.now();LocalDatedate2=LocalDate.of(2018,2,5) ;if(date1.equals(date2)){System.out.println("時間が等しい");}e
