JAVA创建一个私有域_【package-private】包私有类的食用姿势

今天在看Java提供的NIO源码时,偶然看到该包下很多Java类没有加public限定符。

JAVA创建一个私有域_【package-private】包私有类的食用姿势_第1张图片

并且特意加上了 package-private ——包私有的注释。

回想一下,Java默认的对象作用于域确实是包私有。

包私有的概念

1、一个对象可被该对象所在包对象所引用,且不需要加 import ;

2、该对象不可被该对象所在外部包或子包所引用;

比如我在包privatepackage下新建包私有对象C:

JAVA创建一个私有域_【package-private】包私有类的食用姿势_第2张图片

在包privatepackage下新建对象A

JAVA创建一个私有域_【package-private】包私有类的食用姿势_第3张图片

在包privatepackage.b下新建对象B

JAVA创建一个私有域_【package-private】包私有类的食用姿势_第4张图片

此时我在对象A中可引用对象C,idea的代码提示很明显的表明这一点:

JAVA创建一个私有域_【package-private】包私有类的食用姿势_第5张图片

而在对象B中,是无法引用对象C的:

JAVA创建一个私有域_【package-private】包私有类的食用姿势_第6张图片

相信到这里你已经很清楚包私有对象是怎么一回事了,那么包私有对象有什么用?实际上很少人用到,如果不是今天偶然看到Java Nio下的源代码,我都要误以为 class 关键字前必须加上 public 关键字了,毕竟 idea 创建对象的时候,默认就会加上 public 关键字。

个人觉得,包私有对象,可以存在以下几种场景:

1、对接多个外部接口,对于类似的业务,实际上出入参数是类似但又不完全一样的。那么这种时候一个外部渠道定义一个包,该包下的请求参数就可以定义为包私有类型,虽然实际业务中我们是会加上不同的前缀和后缀。

2、作为接口提供方,不能被三方使用的对象。比如你写了个转换工具类,可以被其他团队使用,为了保证工具类的安全和健壮,有些元数据类不能被修改使用,也可以定义为包私有。

你可能感兴趣的:(JAVA创建一个私有域)