如何避免使用内部方法污染API类?

时间:2014-08-13 21:49:39

标签: java access-modifiers api-design

背景:

  • 在C#中,您可以使用internal方法作为程序集(JAR)
  • 内部方法可以由该程序集中的其他类调用,但不能在外部调用。
  • Java没有这样的模拟。
  • 创建API时,我的内部方法必须公开,因此我的API的其他部分可以调用它们。
  • 这会污染我的API,并可能允许用户调用内部方法。

TLDR:如果方法是公开的,我如何指示(或更好地保护)我的API内部方法不被我的API类外的用户调用?

典型示例:

  // public class in com.ashes999.components
  class SpriteComponent {
    // This method should be internal
    public void dispose() { ... } 
  }

  // public class in com.ashes999.management
  class SceneManager {
    public void changeScene(Scene s) {
      for (SpriteComponent s : this.allEntities.allSprites) {
        s.dispose();
      }
    }
  }  

我只会在SpriteComponent.dispose中从我自己的班级中拨打com.ashes999.*。我永远不会期望(甚至希望)其他用户会直接打电话给它;这样做会导致混乱,破坏,混乱和非托管资源过早处理,造成崩溃。

1 个答案:

答案 0 :(得分:4)

  

可以使用修饰符public声明一个类,在这种情况下,该类对所有类都可见。 如果一个类没有修饰符(默认,也称为包私有),它只在其自己的包中可见(包被命名为相关类的组 - 您将在稍后了解它们教训。)

     

在会员级,您也可以使用公共修饰符或不使用修饰符(包私有),就像使用顶级类一样意思相同。对于成员,还有两个额外的访问修饰符:private和protected。 private修饰符指定只能在自己的类中访问该成员。 protected修饰符指定只能在自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问该成员。

Access control