【发布时间】:2014-08-13 21:49:39
【问题描述】:
背景:
- 在 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();
}
}
}
我只会在com.ashes999.* 自己的班级中致电SpriteComponent.dispose。我永远不会期望(甚至希望)其他用户会直接调用它;这样做会导致混乱、破坏、混乱和未受管理的资源被过早处置,从而导致崩溃。
【问题讨论】:
-
你在 Java 中有包私有访问权限。
-
“包私有”?如果这些方法在同一个包中,则可以由其他类中的方法调用,但不能从其他地方的其他类中调用。如果方法没有
public、private或protected修饰符,则它是包私有的。 -
我在一些库(例如 Apache Wicket)中看到在他们的文档中指出不要使用/覆盖某些方法,例如 HtmlSpecialTag
-
另外,this other question 可能有帮助吗?
-
@MikeK 史诗失败...干得好:)
标签: java access-modifiers api-design