隐藏jar文件中的类

nra*_*ner 10 java information-hiding jar facade factory-pattern

是否真的不可能在jar文件中隐藏某些类?

我希望不允许直接实例化类以使其更灵活.这个罐子里只能看到工厂(或立面).

除了创建两个项目之外,还有其他办法解决这个问题吗?(两个项目:第一个包含类(实现),另一个引用第一个并包含工厂;后面只引用第二个)

Mik*_*man 5

我理解你不是要隐藏实际的课程,只是防止他们在工厂外面建造.我认为通过在类构造函数中使用包私有(默认)可见性可以很容易地实现这一点.唯一的限制是您需要将类和工厂放在同一个包中,因此在中型到大型代码库中,事情可能会变得不必要地复杂化.

  • 哦,实际上,这样任何人都可以通过创建自己的工厂类并将它们放在同一个包中来调用你的构造函数.也许最好从_why_开始你想要隐藏这些东西? (4认同)

gig*_*dot 3

我认为如果您的公共工厂方法尝试返回“隐藏”的内容,您将会遇到编译器失败或警告。

不,您不能在不重新实现自己的类ClassLoader或使用 OSGi 或类似的东西的情况下隐藏公共类。

您可以做的是将接口 api 与实现分开,例如,有一个仅包含接口的项目和另一个包含实现的项目。但是,您仍然无法隐藏实现类。