2014-02-12 41 views
1

我一直在想。我有這個Vertex類,它是通用Graph類的一部分。這個頂點類擁有一個實體對象。在我的系統中,所有事情都是通過Vertex發生的,你不能用getter直接訪問實體對象。我意識到,我必須在實體類中創建公共方法,以便可以從Vertex類中調用它們。有沒有辦法只將方法暴露給擁有所述對象的類?公共訪問只有擁有對象的類

因爲現在我可以實例化一個實體並使用它的公共方法,但它在Vertex類之外沒有任何意義。我不知道是否有一種模式或者人們所做的只是讓業主使用他們所擁有的任何方法。

我現在正在使用Java,但C++也很好。我相信在C++中你可以使用friend關鍵字。

//Vertex.java 
public class Vertex 
{ 
    private NodeDrawable _node; 
    ... 
} 

//NodeDrawable.java 
public class NodeDrawable 
{ 
    private disable(); 
} 

我想使Vertex成爲唯一允許訪問NodeDrawable方法的類。內部類很酷,但我不喜歡在一個文件中有多個類。

+0

您可以使用受保護的方法,該方法只允許從子類訪問。不知道這是你之後的事情。 – dcp

+0

你可以發佈一些代碼 - 至少只是一個大綱,以便我們可以看到類結構?只看這個描述,我很難想象你正在做什麼。 – ajb

+0

我已經擴展了我的問題。 –

回答

0

首先,我會問自己暴露實體類是否可行。之後,您可以將實體方法設爲私有,您的頂點類仍然可以訪問它們,而其他人則不會 - 與受相同源代碼包中的類訪問的受保護方法進行比較。

編輯

你將不得不選擇訪問修飾符出Java的可能性和Java不會讓你指定一個「朋友」類 - 這樣做的Java的方式是這個內部類。

+0

如果Vertex類訪問實體方法聲明爲私有方法,您如何能夠使用這些方法?這裏沒有涉及繼承。 –

+0

看來我誤解了 - 我認爲,實體是Vertex的內部類。 – Smutje

0

應該對對象及其元素具有最少的必需訪問權限。如果您不需要訪問實體,並且僅通過Vertex訪問它是有意義的,那麼在Vertex中將所有對象句柄和方法設爲私有。

0

我想你想要的是模擬java中的C++朋友修改器看這個this的問題。希望能幫助到你。

0

您可以使用內部類。內部類可以訪問其包含的類的變量和方法,反之亦然。如果您只想讓外部類訪問內部類,則可以使內部類爲私有類。那麼甚至連同一個包中的其他類都不能調用Outer.Inner(或者在你的情況下,Vertex.Entity)。請參閱docs.oracle.com/javase/tutorial/java/javaOO/nested.html

相關問題