先日リリースされた、IntelliJ IDEA 2023.3では、Java 21対応が完全サポートと謳われています。
9月に書いたブログ(下記)では、IntelliJ IDEA 2023.2.1でOpenJDK 21のPreview機能であるJEP 445 Unnamed Classes and Instance Main Methods の構文を認識できなかったと書きました。その後も2023.2.5までは未対応でした。
sealed interface Engine permits ElectricEngine, PetrolEngine {...}
class ElectricEngine implements Engine {...}
class PetrolEngine implements Engine {...}
class Vehicle {
private final Engine engine;
:
public void refuel() {
switch (engine){
case ElectricEngine de -> {
:
}
case PetrolEngine pe -> {
:
}
default -> throw new IllegalStateException("Vehicle has no engine");
JDK 21で正式機能となったJEP 441 Pattern matching for switchが使われています。
switchで、Engine型のengineを渡すと、caseで、具象型に基づく選択ができます。なるほど、これはキャストやinstanceofがまったく登場せずにダウンキャストの選択ができています。
コレクションフレームワークの説明で、Collection(インタフェース)を継承するList、Queue、Setのインタフェースと、Collectionを継承しないMapがあるとの説明がありました。
ちょうど先週リリースされた Java SE 21のJDKから、コレクションフレームワークに変更が入り、Collectionを継承するSequencedCollectionが追加され、ListはこのSequencedCollectionを継承するようになりました。
java.util.RandomのAPIドキュメントを見ると、nextDouble(double)が見つからないのですが?
次のJava SE 17のAPIドキュメントで、java.util.Randomクラスのメソッドを見ると、nextDouble()はあるがnextDoune(double)がすべてのメソッドの一覧に見つかりません。
Random (Java SE 17 & JDK 17)
よくよく見ていくと、java.util.Randomクラスは、インタフェースjava.util.random.RandomGeneratorを実装しています。このRandomGeneratorインタフェースには、nextDouble(double)がデフォルト実装で定義されています。
そのため、java.util.Randomインスタンスに対して nextDouble(double)メソッドの呼び出しが可能でした。
Java SE APIドキュメントでは、そのクラスがimplementsしているインタフェースのdefaultメソッドについては、引数・戻り値がないメソッド名のみが下の方に記載されているのみです。
public final class javareading.HelloRecord extends java.lang.Record
:
public javareading.HelloRecord(java.lang.String);
:
public final java.lang.String toString();
:
public final int hashCode();
:
public final boolean equals(java.lang.Object);
:
public java.lang.String message();
: