有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java根据预定义的API限制对类和方法的访问

我有一个Java项目,每个包中有多个包和多个类。我希望这个项目被用作一个库(在本例中更好地说是框架),提供某些功能。该框架将被其他应用程序(在不同的Eclipse项目中)使用

如何指定希望可用于其他应用程序的类和方法?我只希望一些类/方法成为API的一部分。其余实现的代码应该为用户隐藏

PD:我不是指如何设计API,而是指如何组织代码或者应该使用哪些访问修饰符


共 (2) 个答案

  1. # 1 楼答案

    除非将所有代码放在一个包中,否则需要公开实现中包之间共享的任何内容

    通常,解决这个问题的方法是按照惯例:只为API类提供文档,并指定JAR中的任何其他类都不受支持,并且可能随时更改。这就是Sun对java所做的——API在两个独立的包结构java下发布。不管怎样。太阳无论什么通用域名格式。sun不受支持或没有文档记录,使用这些类的风险自负

    一些API提供商还喜欢提供两个独立的JAR,一个是显式API,另一个是显式支持/实现。这允许客户端对API JAR只有编译时依赖,但对两者都有运行时依赖

    您还应该强烈考虑密封您的jar,以防止客户端将类放入您正在使用的相同包中,并访问受保护或包保护(默认)成员。

  2. # 2 楼答案

    普通Java没有很好的工具来处理这个问题。在许多情况下,开发人员都会使用约定,比如不记录某些类/包或以某种方式命名它们。例如“org.myframework”和“org.myframework.internal”

    如果你想要更好的东西,你应该考虑OSGi,OSGi让你控制包从一个包中导出什么(一个有额外元数据的jar),哪些是内部保存的。您甚至可以指定应该导出一个包,但只能导出到列出的捆绑包集。这在跨多个bundle的复杂框架中非常有用