关于Java的访问权限问题
大家好:最近做一个导航类项目,客户要我们把功能以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内部的包访问,而不允许外界访问?
谢谢大家! java jar --------------------编程问答-------------------- 对外提供的方法都要提供API文档,你只需在文档中包含想要对外的方法即可,调用其它方法,属于后果自负型 --------------------编程问答-------------------- 你知道接口的含义吗?
在Java设计模式里面,有这样一个概念,可以把Java的代码分成两类,
一类是用来保存数据的,一类是用来干一些事情的。当然也会有两者兼有的类,咱们暂且不谈。
用于保存数据的类,我们时常会用到,比如 ORM 框架里的POJO 等等。
用于完成事情的类,我们也会常用到,比如 ORM 框架中的DAO 等等,它操纵数据。
接口,属于完成事情的一种抽象,你必须配一个实现类,来实现这件事情。
楼主想要实现,b包中的代码被保护,a和c包的代码被共享,那么,可以把b包中的类进行分类。
将b包中,保存数据的类,进行共享。将b包中完成事情的类,提取出接口Inte易做图ce。
将Inte易做图ce共享给a和c包,原有b包中的行为类,保留下来,内部使用。
你想对外公开哪个类的哪个方法,只要在Inte易做图ce中,写上那个方法就可以了,因为Inte易做图ce被你公开了,但是具体的实现类,在b包中,不提供给对方就可以了。
如果整个代码需要接口的实现类,你又不想泄露真实的实现类,那就写一个假实现,提供过去,当然了,最好是写一个工厂类,提供这个假实现,到时候,和你项目集成的时候,只要修改工厂类,将假实现替换成b包中具体实现类即可。 --------------------编程问答-------------------- 楼主的问题就好像 既要让某包被外包可访问,又要让它不可被外包访问,这本身是矛盾的
对于java的包访问权限来说,它可不会区分项目外还是项目内
唯一的区别是项目内的你希望对之开放的包你拥有设计权限,我觉得两种
1.通过继承,设置访问权限protected,那只有有继承关系的外包能访问了
2.开始就设计在一个包里
--------------------编程问答--------------------
补充:Java , Java SE