首頁 >Java >java教程 >奇怪的循環模板模式 (CRTP) 如何解決 Java 的類型變數限制?

奇怪的循環模板模式 (CRTP) 如何解決 Java 的類型變數限制?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-14 03:36:14453瀏覽

How Can the Curiously Recurring Template Pattern (CRTP) Solve Java's Type Variable Limitations?

用於引用目前類型的類型變數

在物件導向程式設計中,通常需要在方法或函數中引用目前實例的類型。然而,在 Java 中,類型變數不允許引用它們所聲明的類別的類型,從而導致無法實現所需行為的情況。

規避類型變數限制

為了克服這個限制,出現了一種複雜的模式,稱為「奇怪的重複模板模式」(CRTP)。此模式涉及建立一個分層類別結構,其中層次結構的每個層級都定義一個用於傳回其實例的執行時間類型的契約:

SelfTyped Base Class

abstract class SelfTyped<SELF extends SelfTyped<SELF>> {

   abstract SELF self();
}

中級擴展課程(摘要)

public abstract class MyBaseClass<SELF extends MyBaseClass<SELF>>
extends SelfTyped<SELF> {

    MyBaseClass() { }

    public SELF baseMethod() {

        //logic

        return self();
    }
}

葉實作類別(最終)

public final class MyLeafClass extends MyBaseClass<MyLeafClass> {

    @Override
    MyLeafClass self() {
        return this;
    }

    public MyLeafClass leafMethod() {

        //logic

        return self(); //could also just return this
    }
}

模式使用使用

MyLeafClass mlc = new MyLeafClass().baseMethod().leafMethod();
AnotherLeafClass alc = new AnotherLeafClass().baseMethod().anotherLeafMethod();

模式用法用法

模式用法

使用
  • 注意事項和限制
  • CRTP 模式並非沒有陷阱和限制:
  • 濫用的可能性:如果類型超出預期,則該模式可能會被濫用層次結構嘗試使用不正確或誤導性的類型來實現SELF。

Limited Public可擴展性:為了防止誤用,建議將中間類別保持包私有並避免公開擴展它們。

語法糖:

最終,CRTP 模式只提供語法糖和並沒有真正規避類型的限制結論結論 CRTP模式提供了一種使用類型變數來引用當前類型的解決方法,但仔細考慮其含義和使用非常重要它有節制地。這是一種複雜的模式,需要仔細實施,並且應該保留用於其好處超過增加的複雜性的情況。

以上是奇怪的循環模板模式 (CRTP) 如何解決 Java 的類型變數限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn