仅对拥有对象的类进行公共访问

时间:2014-02-12 16:52:25

标签: java c++

我一直在想。我有这个Vertex类,它是通用Graph类的一部分。此Vertex类拥有一个实体对象。在我的系统中,一切都通过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方法的类。内部类很酷,但我不喜欢在一个文件中有多个类。

4 个答案:

答案 0 :(得分:0)

应该对对象及其元素具有最小的必需访问权限。如果您不需要访问实体,并且仅通过Vertex访问它是有意义的,则在Vertex中将所有对象句柄和方法设为私有。

答案 1 :(得分:0)

首先,我会问自己是否可以公开Entity类。之后,您可以将Entities方法设为私有,您的Vertex类仍然可以访问它们,而其他人则不会 - 与同一源代码包中的类可以访问的受保护方法进行比较。

修改

您必须从Java的可能性中选择访问修饰符,Java不允许您指定单个“朋友”类 - 这样做的Java方法是内部类。

答案 2 :(得分:0)

我想你想要的是在java中模拟c ++ friend modificator看看这个this的问题。希望它有所帮助。

答案 3 :(得分:0)

您可以使用内部类。内部类可以访问其包含类的变量和方法,反之亦然。如果您只希望外部类可以访问内部类,则可以将内部类设为私有。然后,即使是同一个包中的其他类也不能调用Outer.Inner(或者在你的情况下,调用Vertex.Entity)。请参阅docs.oracle.com/javase/tutorial/java/javaOO/nested.html