Java 确保只有A类可以调用B类

Java 确保只有A类可以调用B类,java,oop,object,design-patterns,Java,Oop,Object,Design Patterns,我有两个班A和B 我如何确保在我的软件中,除了A类以外,没有其他地方调用或引用B类? 我想在A里面写classB,但我并不特别喜欢 我可以这样做吗:检查谁调用了类B的方法,如果它不是类a,则忽略它?限制访问的唯一方法是通过某种访问修饰符 public class A { private static class B { } } 但你说过你不想要嵌套类或内部类 另一种方法是为这两个类创建一个单独的包,并使B仅对包可见。(这是否可以接受取决于您的具体情况。) A.java pack

我有两个班
A
B

我如何确保在我的软件中,除了A类以外,没有其他地方调用或引用B类?

我想在
A
里面写class
B
,但我并不特别喜欢


我可以这样做吗:检查谁调用了类B的方法,如果它不是类a,则忽略它?

限制访问的唯一方法是通过某种访问修饰符

public class A {
    private static class B {
    }
}
但你说过你不想要嵌套类或内部类

另一种方法是为这两个类创建一个单独的包,并使
B
仅对包可见。(这是否可以接受取决于您的具体情况。)

A.java

package ab;

public class A {
}
package ab;

class B {
}
B.java

package ab;

public class A {
}
package ab;

class B {
}

这里,
B
具有默认的可见性(有时也称为“包专用”或“包保护”)。它的可见性仅限于包内。

您可以在类B中编写所需的方法,然后在类a中编写一个方法,将类B的实例作为参数,并根据参数从第二个方法调用第一个方法


但是这非常难看。

如果您想限制对特定客户机的访问,那么类B应该作为内部类编写(您不喜欢的方式)

事实上,如果一个类不能作为一个独立的功能模块存在,我会避免编写它,这个模块被许多其他模块调用。这其中唯一的一点是对数据模式进行语义组织


我希望我能帮忙

“我想在A中编写B类,但我并不特别喜欢。”-为什么?Java。我不想有一个包含两个类的大文件;真正的个人偏好。在C++中,你可以让所有的B方法都私有,并将类A声明为B的朋友。@ AlxFalBeTrand然后“你的朋友可以访问你的私有”。不幸的是,我在java上工作。小心。保护东西是一回事;偏执狂是另一个。它工作得很好,实际上我已经把这两门课放在一个包里了。因此,包装解决方案非常出色。谢谢