Java 8の新機能の解釈と応用実践
1. はじめに
Java 8 では、多くの大きな改善と新機能が導入されています。これらの新機能により、Java プログラミングがより便利かつ効率的になり、コードの可読性と保守性が向上します。
2. ラムダ式
-
ラムダ式は、関数インターフェイスのインスタンスとして使用できる匿名関数です。
(parameters) -> expression
上記の構文では、パラメーター リストと式は矢印「 -> 」で区切られています。
-
関数型インターフェイスは、抽象メソッドを 1 つだけ含むインターフェイスです。ラムダ式は、関数インターフェイス型の変数に割り当てることができます。
// 定义函数式接口 interface MyInterface { void myMethod(); } // 使用Lambda表达式创建MyInterface接口的实例 MyInterface myInterface = () -> System.out.println("Hello, world!");
-
ラムダ式は、コレクション操作、イベント処理など、さまざまなアプリケーション シナリオで使用できます。
3. ストリーミングプログラミング
-
ストリームはソースから生成された一連の要素であり、順次および並列の集約操作をサポートします。
-
ストリームを使用して、コレクションや配列などのデータ ソースを操作できます。
// 创建一个字符串list List<String> list = Arrays.asList("Java", "Python", "JavaScript"); // 通过list创建一个流 Stream<String> stream = list.stream();
-
ストリームは中間操作と終了操作をサポートします。中間操作は新しいストリームを返し、複数の中間操作をチェーンで呼び出すことができます。終了操作は最終結果の計算であり、一度だけ呼び出すことができます。
// 中间操作:过滤出长度大于4的字符串 Stream<String> filteredStream = stream.filter(e -> e.length() > 4); // 中间操作:对长度大于4的字符串进行排序 Stream<String> sortedStream = filteredStream.sorted(); // 终止操作:将流转换为数组,并输出 String[] resultArray = sortedStream.toArray(String[]::new); Arrays.stream(resultArray).forEach(System.out::println);
-
ストリーミング プログラミングにより、コードの単純さと読みやすさが向上すると同時に、並列処理などの最適化操作も自動化できます。
4. 日付/時刻 API
1。概要
Java 8 では、まったく新しい日付/時刻 API が導入され、古い Date クラスと Calendar クラスがエレガントで覚えやすい API メソッドに置き換えられます。新しい API は、より正確な時間表現 (ナノ秒レベル)、不変性、スレッド セーフなど、多くの新機能を提供します。
2. LocalDate、LocalTime、LocalDateTime およびその他のクラスの使用
Java 8 には複数の日付と時刻に関連するクラスが用意されており、一般的に使用されるクラスは次のとおりです。
- LocalDate: 日付を表します (例: 2019-12-31)。
- LocalTime: 時間を示します (例: 23:59:59.999)。
- LocalDateTime: 日付と時刻を表します (例: 2019-12-31T23:59:59.999)。
- インスタント: ナノ秒レベルまで正確なタイムスタンプを表します。
- ZonedDateTime: 日付と時刻をタイムゾーンで表します。
これらのクラスは不変であるためスレッドセーフであり、オブジェクトはファクトリ メソッドを介して作成できます。例えば:
LocalDateTime now = LocalDateTime.now(); // 当前时间
LocalDate date = LocalDate.of(2023, Month.MAY, 25); // 特定日期
LocalTime time = LocalTime.of(21, 8, 28, 0); // 特定时间
3. フォーマットと解析
Java 8 の新しい日付/時刻 API は、日付/時刻を文字列に書式設定したり、文字列を日付/時刻オブジェクトに解析したりできる書式設定および解析関数も提供します。
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter); // 格式化为字符串
LocalDateTime parsedDateTime = LocalDateTime.parse(formattedDateTime, formatter); // 解析为日期时间对象
- アプリケーション例
Java 8 の日付/時刻 API は、次のようなさまざまなシナリオに適用できます。
// 计算两个日期之间的天数
LocalDate date1 = LocalDate.of(2023, Month.MAY, 25);
LocalDate date2 = LocalDate.of(2024, Month.MAY, 25);
long daysBetween = ChronoUnit.DAYS.between(date1, date2);
// 打印出每个月包含多少天
YearMonth yearMonth = YearMonth.of(2023, Month.FEBRUARY);
int daysInMonth = yearMonth.lengthOfMonth();
System.out.printf("Days in month: %d%n", daysInMonth);
// 判断一个特定的时间是否在另一个时间之前或之后
LocalDateTime dateTime1 = LocalDateTime.of(2023, Month.MAY, 25, 21, 8, 28);
LocalDateTime dateTime2 = LocalDateTime.of(2023, Month.MAY, 26, 21, 8, 28);
boolean isBefore = dateTime1.isBefore(dateTime2);
boolean isAfter = dateTime1.isAfter(dateTime2);
5. 注釈と型注釈の複製
1. コンセプトと機能
Java 8 では、反復アノテーションと型アノテーションの機能が導入されました。
反復アノテーションを使用すると、同じ要素に対して同じアノテーションを複数回使用できます。次に例を示します。
@Author(name = "Alice")
@Author(name = "Bob")
public class Book {
// ...
}
型アノテーションを使用すると、型、メソッド、パラメータ、変数などの要素にアノテーションを使用できます。次に例を示します。
void process(@NonNull String param) {
// ...
}
class Example<@TypeParameter T> {
// ...
}
2. 注釈インスタンスを繰り返します
@Tag アノテーションを作成します。これは、クラスまたはメソッドにタグを追加するために使用できます。
@Repeatable(Tags.class)
public @interface Tag {
String value();
}
@Retention(RetentionPolicy.RUNTIME)
public @interface Tags {
Tag[] value();
}
@Tags({
@Tag("java"), @Tag("programming")})
public class MyClass {
// ...
}
3. 型アノテーションの例
@NonNull アノテーションを作成して、要素を null にできないことを示します。
@Target({
ElementType.TYPE_USE, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface NonNull {
}
public class Example {
private @NonNull String name;
public Example(@NonNull String name) {
this.name = Objects.requireNonNull(name);
}
public void process(@NonNull String param) {
// ...
}
}
6. 総括レビュー
-
Java 8 の新機能のレビュー
Java 8 では、ラムダ式、ストリーム処理 API、日付/時刻 API、デフォルトのメソッドとインターフェイスの拡張機能など、多くの新機能が導入されています。これらの新機能により、Java 言語自体の機能が強化され、コードの可読性、保守性、再利用性も向上します。 -
アプリケーションの提案
Java 8 の新機能を使用する場合は、次の点に注意する必要があります。
- JDK バージョンが 1.8 以降であることを確認してください。
- 新しい API を理解し、それらを適切に使用してコードを簡素化します。
- 既存のコードをリファクタリングして新しい機能を活用します。