[英]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.