簡體   English   中英

Java類層次結構,如何始終實現可選變量

[英]Java class hierarchy, how to implement optional variable throughout

我想知道是否存在任何“干凈”的方法來在整個類層次結構中實現一個可選變量,而不會一直將其保留為null並始終進行nullcheck。 假設我有以下抽象父類:

public abstract class Item {

public String name;

public Item(String name){
    this.name = name;
}

public String getName(){
    return name;
}

非常簡單。 現在,我有另一個抽象類來擴展它,還有更多抽象類來擴展這個類,每個抽象類都有自己的一些其他變量/方法。 Item也有一個擴展它的存根類(除了調用super()的構造函數外,什么也沒有),如果可以將Item做成具體的,則不需要,但這取決於解決方案。

現在,假設這些具體類中的任何一個都可能包含MyObject的實例。 將創建大量項目。 Item層次結構中任何類的某些實例都會擁有它,而某些則不會。 程序無法在編譯時告知。 我不能真正地將層次結構分為兩棵獨立但幾乎完全相同的樹,一棵有MyObject,一棵沒有。 這將導致大量的代碼重復。 用包含MyObject的另一個具體類對具體實現進行子類化將意味着過多的類型檢查,這將變得很丑陋,尤其是當層次結構增長時。 將接口/抽象類放在更高的位置也不是一種選擇,因為那樣會使MyObject出現在所有內容中。 無論采用哪種解決方案,所有這些都必須具有通用的接口/抽象類。

我可能正在挑剔,應該只在層次結構的頂部實現MyObject並對其進行nullcheck或使用一個簡單的布爾方法來告訴我它是否存在,但是對我來說仍然有點草率,我想找到一個如果可能的話,更好的解決方案。

您對問題的描述使我想起了Decorator模式的動機-過度增長的類層次結構,具有某種通緝的“多重繼承”和“超類組合”。 看一下Internet上Decorator的描述,並看一下很好的例子,看看Reader / Writer標准Java類是如何實現的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM