首頁 >Java >java教程 >從異質集合中檢索物件時,泛型如何消除類型轉換?

從異質集合中檢索物件時,泛型如何消除類型轉換?

Susan Sarandon
Susan Sarandon原創
2024-12-24 00:19:10317瀏覽

How Can Generics Eliminate Typecasting When Retrieving Objects from Heterogeneous Collections?

使用返回類型中的泛型克服類型轉換

在 OOP 程式設計中,類別通常會維護相關物件的集合。例如,Animal 類別可能會追蹤朋友列表,該列表可以是各種子類別(例如 Dog 和 Duck)的實例。

傳統上,由於朋友的異質性,從該清單中檢索特定朋友需要進行類型轉換。集合。這會產生以下程式碼:

Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());

((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();

為了避免這種繁瑣的類型轉換,請考慮使用泛型使 callFriend 方法的傳回類型特定於正確的子類別。但是,在這種特定場景中,將返回類型指定為參數,例如:

public <T extends Animal> T callFriend(String name, T unusedTypeObj) {
    return (T)friends.get(name);
}

沒有幫助,因為未使用的類型參數在運行時不提供其他資訊。

相反,有一種解決方法涉及將所需類型的類別作為參數傳遞給callFriend:

public <T extends Animal> T callFriend(String name, Class<T> type) {
    return type.cast(friends.get(name));
}

透過此實現,方法呼叫變為:

jerry.callFriend("spike", Dog.class).bark();
jerry.callFriend("quacker", Duck.class).quack();

此解決方案消除了運行時類型轉換,並確保傳回的物件可以安全地轉換為所需的子類別。

以上是從異質集合中檢索物件時,泛型如何消除類型轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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