簡體   English   中英

Java中的一個類可以控制另一類的對象嗎?

[英]Can one class in java control object in another class?

假設我有一個叫做Factory的類。 我打算讓該類公開訪問,以便任何人都可以創建和訪問factory 我希望工廠創建和分發widgets 我只希望工廠能夠創建widgets ,而不希望公共程序空間中的任何人。 但是,我希望有一個名為distribute()的方法,該方法將向主程序提供一個widget 到那時,主程序可以訪問該widget所有公共方法。 如果需要,它也可以將其還給工廠,從而消除對該對象的任何公共訪問。

如果可能的話,如何做到這一點?

您正在尋找的是內部類。 通過將內部類的構造函數聲明為私有,只有封裝類可以訪問它! 然后,您可以在外部類中創建工廠方法來構建小部件並進行分發。 我在這里已聲明為static ,但這不是必需的,具體取決於您的需求。

public class Factory {

  public static Widget buildWidget() {
    Widget widget = new Widget();
    return widget;
  }

  public class Widget {
    private Widget() { ... }
    public void someMethod() { ... }
  }
}

請注意,在干凈的代碼中,您必須通過注意參照完整性來解決您的其他問題。 要“回饋”窗口小部件,必須釋放對其的所有其他引用。 您的工廠當然可以跟蹤給出了哪些小部件,但是很難可靠地“調用”小部件。

您正在描述隨時間變化的訪問控制(“如果需要的話,它也可以將它還給工廠,從而刪除對該對象的任何公共訪問。”)。 Java不能那樣工作。 所有訪問限定符都經過靜態檢查,並且在程序的整個生命周期內保持不變。

將小部件與工廠放置在相同的程序包中,並將小部件的構造函數設置為具有受保護的可見性。 這會將對象的創建限制為工廠。

對於每個小部件,訪問控制可以部分實現。 您可以在允許訪問的每個對象小部件中保留一個列表,只有工廠才能修改此列表(受保護的可見性)。 對於所有公共功能,您都要求用戶傳入已被授權訪問小部件功能的對象。 您可以通過將已授權的對象傳遞回工廠來返回該對象,以便刪除授權。

您可以在主類中傳遞一個私有對象作為授權對象-這將阻止其他類使用該小部件。 但是,這不會阻止其他類請求授權。

這有點怪異,因為您可能忘記了釋放授權,並使窗口小部件帶有“不死對象”(除了窗口小部件中的訪問控制列表以外,其他任何地方都沒有使用)。

暫無
暫無

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

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