根据预定义的API限制访问的类和方法(Restrict access to classes and

2019-10-19 14:20发布

我有一个在每个包多个包以及多种类型的Java项目。 我希望这个项目可以作为一个库(最好说在这种情况下框架),提供某些功能。 该框架将被其他应用程序(在不同的Eclipse项目)一起使用。

我怎么可以指定我想成为可供其他应用程序的类和方法? 我只想要一个几类/方法是API的一部分。 在implementated代码的其余部分应该被隐藏的用户。

PD:我不意思是如何设计的API,但如何组织代码或访问修饰符,我应该使用。

Answer 1:

那么,除非你把所有的代码在一个包,你将需要做的是得到你实现包之间共享的公共什么。

通常,这种解决问题的方式是通过约定:只为API类提供文件,并指定任何其他类在你的JAR不支持,可能会随时发生变化。 这是Sun并用java - 的API船下两个单独的封装结构,java.whatever和com.sun.whatever。 的com.sun不支持或者记录,你在你自己的风险使用这些类。

一些API提供商也想出货两个独立的JAR文件,其中之一是明确的API,另一种是明确支持/实施。 这允许客户机只对API JAR编译时的依赖,但两者的运行时依赖。

你也应该认真考虑您的密封JAR(S),以防止客户把班级您使用的相同的包和访问受保护或保护包(默认)的成员。



Answer 2:

纯Java没有好的工具来处理这个问题。 在许多情况下,开发商再打一个约定,如不记录某些类/包或以某种方式给它们命名。 例如“org.myframework”和“org.myframework.internal”。

如果你想要更好的东西,你应该考虑的OSGi,这给你一个什么样的包是从包出口控制,哪些你保持内部(额外的元数据的JAR)。 你甚至可以指定一个包应该出口,但只有到集合中列出束。 这可以是在跨越多个束复杂的框架是有用的。



文章来源: Restrict access to classes and methods according to a predefined API