匿名クラス は名前のないクラスであり、追加のファイルを必要とせずに、クラスまたはインターフェイスの実装をインプレースで定義およびインスタンス化するのに最適です。 使い捨ての性質のため、再利用はできません。ローカル クラス (宣言) とは異なり、匿名クラスは、変数に割り当て可能な単一のオブジェクトを生成する式です。
これらは、インターフェイスや抽象クラスの特定のメソッドを定義する場合など、クラスが 1 回だけ使用される場合に特に便利です。 このアプリケーションは、Java Swing で event listeners
またはラムダ関数 (アロー関数) を使用して頻繁に使用されます。
興味深い事実として、Java コンパイラーは、それらを含むクラスの名前とその位置を示す番号で形成される自動名 (例: ClaseContenedora.class
) を割り当てます。
構文:
式であるため、その構文はコンストラクターの呼び出しに似ていますが、代わりに、クラスの構造を定義するコードのブロックが含まれています。
ClaseOInterfaz nombreVariable = new ClaseOInterfaz() { // Cuerpo de la clase anónima };
主要なコンポーネントは次のとおりです:
new
.匿名クラスの種類:
例:
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 サイトの他の関連記事を参照してください。