Java
 Computer >> コンピューター >  >> プログラミング >> Java

ダイヤモンド演算子はJava 9の匿名内部クラスで使える?使い方と注意点を解説

はい、Java 9以降であれば、ダイヤモンド演算子(<>)を匿名内部クラスで使用することができます。

ダイヤモンド演算子を使用する目的は、式の右側でジェネリック型を再び記述する必要をなくし、冗長なコードを排除して可読性を高めることです。Java 7で導入された当初、この演算子は通常のクラスにのみ適用可能で、匿名内部クラスでは使用できませんでした。無理に使用しようとすると、コンパイルエラーが発生していました。

この制限はJava 9で撤廃されました。以下の例では、ダイヤモンド演算子を匿名内部クラスと組み合わせて使用しています。

コード例

import java.util.*;
public class DiamondOperatorTest {
    public static void main(String args[]) {
        String[] str = {"Raja", "Adithya", "Jai", "Chaitanya", "Vamsi"};
        Iterator<String> itr = new Iterator<>() {    // 匿名内部クラス
            int i = 0;
            public boolean hasNext() {
                return i < str.length;
            }
            public String next() {
                if(!hasNext()) {
                    throw new NoSuchElementException();
                }
                return str[i++];
            }
        };
        while(itr.hasNext()) {
            System.out.println(itr.next());
        }
    }
}

実行結果

Raja
Adithya
Jai
Chaitanya
Vamsi

使用時の注意点

匿名内部クラスでダイヤモンド演算子を使う場合、推論される型は「明示的に記述できる型(denotable type)」である必要があります。たとえば、ワイルドカード(?)を含む複雑なジェネリック型は推論できず、コンパイルエラーとなる点に注意してください。また、代入先の変数の宣言型から型が推論されるため、右辺と左辺の整合性が保たれるように設計することが重要です。

  1. Javaの列挙型(enum)は任意のクラスを拡張できる?継承の仕組みを解説

    Javaの列挙型(enum)とは列挙型(enum)は、Javaにおいて定数の集合を格納するためのデータ型です。1週間の曜日や1年の月名など、固定された値のグループを扱う際に活用されます。列挙型を定義するには、enumキーワードの後に列挙型の名前を続けて記述します。enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }配列と同様に、列挙型内の要素(定数)には0から始まる番号が自動的に割り当てられます。上記の例では、各曜日が以下の図のように番号で識別されます。列挙型はクラスとよく似た構造を持ち

  2. JavaでJTextFieldにパディングを追加する方法【setMarginの使い方】

    JTextFieldはJTextComponentクラスのサブクラスであり、ユーザーが1行形式でテキストを入力できる、Swingの中でも特に重要なコンポーネントの一つです。JTextFieldでは、ユーザーが入力を行う際にActionListenerインターフェースを通じてアクションイベントが発生します。主なメソッドとしては、setText()、getText()、setBorder()、setEnabled()などが挙げられます。 JTextFieldにパディング(内側の余白)を追加したい場合は、JTextComponentクラスが提供するsetMargin(Insets m)メソッドを使用