我一直在想。我有这个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方法的类。内部类很酷,但我不喜欢在一个文件中有多个类。
答案 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