首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 泛型類初始化難題:遞迴型別邊界的正確寫法

     編輯:程式設計綜合問答

問題現象

定義泛型類 Test<U, V extends Test<U, V>>,直接 new Test<>() 編譯報錯,因為型別參數 V 需要是 Test<U, V> 的子類型,形成遞迴定義,無法直接實例化。

解決思路

需建立一個具體子類別來「閉合」遞迴型別邊界,例如:

class A extends Test<String, A> { }

此時 A 滿足 V extends Test<U, V> 的約束,即可實例化:

Test<String, A> t = new Test<String, A>(); // 或 new A();

完整可運行範例

class Test<U, V extends Test<U, V>> {
    public Test() { System.out.println("success"); }
}
class A extends Test<String, A> { }
public class Main {
    public static void main(String[] args) {
        Test<String, A> t = new Test<String, A>(); // 輸出 success
    }
}

關鍵點總結

  • 遞迴型別邊界(Recursive Type Bound)常用於 Builder 模式或比較器鏈。
  • 必須提供具體子類別作為型別參數,才能實例化泛型類。
  • 若僅需泛型方法,可考慮將遞迴約束移至方法層級。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved