Java 中的匿名類
匿名類是未命名的類,非常適合就地定義和實例化類或介面的實現,而不需要額外的文件。 其一次性使用性質阻礙了其重複使用。與本地類別(宣告)不同,匿名類別是產生單一物件的表達式,可指派給變數。
當一個類別只使用一次時,例如在定義介面或抽象類別的特定方法時,它們特別有用。 它在 Java Swing 中的應用很頻繁,有 event listeners
或 lambda 函數(箭頭函數)。
一個奇怪的事實是,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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

在使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名以構建查詢條件,是一個常見的難題。本文將針...
