Javaの匿名クラス

DDD
リリース: 2025-01-20 22:33:15
オリジナル
554 人が閲覧しました

Clases anónimas en Java

Java の

匿名クラス は名前のないクラスであり、追加のファイルを必要とせずに、クラスまたはインターフェイスの実装をインプレースで定義およびインスタンス化するのに最適です。 使い捨ての性質のため、再利用はできません。ローカル クラス (宣言) とは異なり、匿名クラスは、変数に割り当て可能な単一のオブジェクトを生成する式です。

これらは、インターフェイスや抽象クラスの特定のメソッドを定義する場合など、クラスが 1 回だけ使用される場合に特に便利です。 このアプリケーションは、Java Swing で event listeners またはラムダ関数 (アロー関数) を使用して頻繁に使用されます。

興味深い事実として、Java コンパイラーは、それらを含むクラスの名前とその位置を示す番号で形成される自動名 (例: ClaseContenedora.class) を割り当てます。

構文:

式であるため、その構文はコンストラクターの呼び出しに似ていますが、代わりに、クラスの構造を定義するコードのブロックが含まれています。

ClaseOInterfaz nombreVariable = new ClaseOInterfaz() {
    // Cuerpo de la clase anónima
};
ログイン後にコピー

主要なコンポーネントは次のとおりです:

  • 演算子 new.
  • 拡張するクラスまたは実装するインターフェースの名前。
  • 通常のクラスをインスタンス化するときと同様に、コンストラクター引数を含む括弧 (ある場合)。 インターフェースでは、括弧は空です。
  • クラスの本体をロックするキー。
  • 宣言とインスタンス化は 1 行で行われ、変数に格納されます。

匿名クラスの種類:

  • クラスの拡張
  • 抽象クラスの拡張。
  • インターフェースの実装。
  • メソッドの引数。

例:

1.クラスの拡張:

public class Carro {
    public void tipoMotor() {
        System.out.println("Motor de combustión interna");
    }
}

public class Main {
    public static void main(String[] args) {
        Carro carroCombustion = new Carro();
        Carro carroElectrico = new Carro() {
            @Override
            public void tipoMotor() {
                System.out.println("Motor eléctrico");
            }
        };
        carroCombustion.tipoMotor(); // Motor de combustión interna
        carroElectrico.tipoMotor(); // Motor eléctrico
    }
}
ログイン後にコピー

2.抽象クラスの拡張:

public abstract class ConexionBD {
    public abstract void obtenerConexion();
}

public class Main {
    public static void main(String[] args) {
        ConexionBD conexionMySQL = new ConexionBD() {
            @Override
            public void obtenerConexion() {
                System.out.println("Conexión a MySQL");
            }
        };
        ConexionBD conexionPostgreSQL = new ConexionBD() {
            @Override
            public void obtenerConexion() {
                System.out.println("Conexión a PostgreSQL");
            }
        };
        conexionMySQL.obtenerConexion(); // Conexión a MySQL
        conexionPostgreSQL.obtenerConexion(); // Conexión a PostgreSQL
    }
}
ログイン後にコピー

3.インターフェースの実装:

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(5, 10, 56, 3, 2, 1, 0);
        numeros.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        System.out.println(numeros); // [56, 10, 5, 3, 2, 1, 0]
    }
}
ログイン後にコピー

4.メソッドの引数:

public class Main {
    public static void main(String[] args) {
        Thread hilo = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("Hola, soy un hilo");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        hilo.start();
    }
}
ログイン後にコピー

利点:

  • 必要な場合にのみオブジェクトを作成します。
  • サブクラスを持たないクラスまたはインターフェイスの動作の変更。
  • より簡潔で読みやすいコード。
  • 追加ファイルを避けることで時間を節約します。

範囲:

通常のクラスと同様に、コンテナ スコープのローカル変数にアクセスできますが、静的イニシャライザやインターフェイスを宣言できないという制限と、非最終ローカル変数または事実上最終ローカル変数へのアクセスの制限があります。

結論:

匿名クラスは Java の強力で多用途なツールであり、ユニークで簡潔な実装に役立ちます。 これを使用すると、暗黙的に使用される場合もありますが、コードが簡素化され、効率が向上します。 詳細については、Java の公式ドキュメントを参照してください。

以上がJavaの匿名クラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート