我正在使用Java。我想要一個只能訪問另一個類的「擁有」對象的類的setter方法。我會更具體:Java後門接口,或者通過調用對象限制方法訪問
我有節點和端口接口。每個節點都有一組端口,每個端口都屬於一個節點。端口可以啓用或禁用,使用簡單的布爾屬性進行處理。但是,我只想讓「擁有」端口的節點設置其啓用/禁用屬性。這應該發生在Node.fixYourPorts()被調用時(OK,它有一個不同的名字,但我試圖簡化)。
所以,我希望大家能夠調用port.isEnabled(),但只有擁有節點應該能夠調用port.setEnabled()。
我能想到的幾個方法可以做到這一點,但我不知道這是最好的,我很擔心,我可能會考慮這個問題的錯誤的方式。想法而已:
每個節點的實現都需要在同一個包匹配的端口實現,並PortImpl.setEnabled()將包的訪問。不能保證一個節點不會改變另一個節點的端口,但這對我來說足夠接近。與任何可能獲得Port實例的隨機客戶端代碼相比,Node代碼更受我的控制。
相反編程到接口端口,程序到一個抽象基類,AbstractPort這是接口節點內部的靜態嵌套類。這個基類將提供setter方法,所以Node實現可以調用它。不知道這是否會起作用。
寫在這一切之上,該客戶端將無法捅另一個代碼層。將setEnabled添加到端口界面。頂層的代碼層將確保setter不會暴露。
將setter添加到接口。如果你作爲客戶端自己啓用或禁用一個端口,那麼你需要做好準備,讓事情無法正常工作。爲此添加評論。
這一切都因Node和Port實現將被持久化到使用Hibernate的數據庫而變得複雜。
任何幫助?
問題是,客戶端只是一個人從訪問中丟棄。但是,這仍然是一個改進,因爲客戶必須有意接觸設置者,而不是讓他們坐在那裏讓他們使用。嗯.... – 2010-04-08 16:39:46
@Michael請注意,'ConfigurablePort'是封裝私有的,因此沒有人可以在該包之外實際向下轉發。 – 2010-04-08 21:15:54
@佩特啊是的,我現在看到了。有點像我的#1,除了你製作一個包 - 私有接口而不是包私有方法。這有助於... – 2010-04-09 00:44:12