关于Java的访问权限问题

大Super 2013-03-18 08:03:38
大家好:
最近做一个导航类项目,客户要我们把功能以SDK的形式对外提供,然后我对一些java包的访问权限问题比较纠结。
问题是这样的,比如我们的SDK内部com.app.a、com.app.c包需要访问com.app.b包里的方法,但是com.app.b包的内容我又不想让提供给外界,只想内部被其他包调用,如果将com.app.b里的方法设置成private的,com.app.a、com.app.c都访问不到,如果设置成公共的,最后发布整个代码都会打到JAR包里,com.app.b的内容都泄露了。
请问怎么做到com.app.b只让SDK内部的包访问,而不允许外界访问?

谢谢大家!
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
达达KZT 2013-03-20
  • 打赏
  • 举报
回复
dracularking 2013-03-19
  • 打赏
  • 举报
回复
楼主的问题就好像 既要让某包被外包可访问,又要让它不可被外包访问,这本身是矛盾的 对于java的包访问权限来说,它可不会区分项目外还是项目内 唯一的区别是项目内的你希望对之开放的包你拥有设计权限,我觉得两种 1.通过继承,设置访问权限protected,那只有有继承关系的外包能访问了 2.开始就设计在一个包里
冰思雨 2013-03-19
  • 打赏
  • 举报
回复
你知道接口的含义吗? 在Java设计模式里面,有这样一个概念,可以把Java的代码分成两类, 一类是用来保存数据的,一类是用来干一些事情的。当然也会有两者兼有的类,咱们暂且不谈。 用于保存数据的类,我们时常会用到,比如 ORM 框架里的POJO 等等。 用于完成事情的类,我们也会常用到,比如 ORM 框架中的DAO 等等,它操纵数据。 接口,属于完成事情的一种抽象,你必须配一个实现类,来实现这件事情。 楼主想要实现,b包中的代码被保护,a和c包的代码被共享,那么,可以把b包中的类进行分类。 将b包中,保存数据的类,进行共享。将b包中完成事情的类,提取出接口Interface。 将Interface共享给a和c包,原有b包中的行为类,保留下来,内部使用。 你想对外公开哪个类的哪个方法,只要在Interface中,写上那个方法就可以了,因为Interface被你公开了,但是具体的实现类,在b包中,不提供给对方就可以了。 如果整个代码需要接口的实现类,你又不想泄露真实的实现类,那就写一个假实现,提供过去,当然了,最好是写一个工厂类,提供这个假实现,到时候,和你项目集成的时候,只要修改工厂类,将假实现替换成b包中具体实现类即可。
龙四 2013-03-18
  • 打赏
  • 举报
回复
对外提供的方法都要提供API文档,你只需在文档中包含想要对外的方法即可,调用其它方法,属于后果自负型

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧