【问题标题】:Ensure that only class A can call class B确保只有A类可以调用B类
【发布时间】:2013-11-17 08:04:23
【问题描述】:

我有两个班级AB

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

我想在A 中写B 类,但我不是特别喜欢。

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

【问题讨论】:

  • “我想在 A 中写 B 类,但我不是特别喜欢那样。” - 为什么?
  • Java。我不想有两个类的大文件;真的是个人喜好。
  • 在 C++ 中,您可以将所有 B 方法设为私有,并将 A 类声明为 B 的朋友。
  • @AlexFarber true 然后“你的朋友可以访问你的私人信息”哈哈。可悲的是,我正在研究 Java。
  • 小心。保护东西是一回事;偏执狂是另一种。

标签: java oop object design-patterns


【解决方案1】:

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

public class A {
    private static class B {
    }
}

但你说你不想要嵌套类或内部类。

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

A.java

package ab;

public class A {
}

B.java

package ab;

class B {
}

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

【讨论】:

  • 效果很好,实际上我已经将这两个类放在了一个包中。因此,包装解决方案非常出色。谢谢!
【解决方案2】:

您可以在 B 类中编写您想要的方法,然后在 A 类中编写一个方法,将 B 类的实例作为参数,并在参数上从第二个方法调用第一个方法。

这很丑。

【讨论】:

    【解决方案3】:

    如果你想限制对特定客户端的访问,B类应该写成一个内部类(你不喜欢的方式)。

    实际上,如果一个类不作为一个独立的功能模块存在(被许多其他模块调用),我会避免编写它。唯一的一点是在语义上组织数据方案。

    希望我能帮上忙!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-25
      • 2013-06-12
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多