package-info.java

package-info.java 文件估计大家见过但是自己却很少去创建和使用它、因为对于一般应用来说可能真的太少见了。

它的作用主要是三个

  • 描述包
  • 使用注解修饰包、达到修饰该包下的类
  • 声明包中使用的类和常量(这个比较少用)

描述包

package-info.java 文件

/**
 * 我是描述信息
 */
package com.demo.test.info;

微信公众号:CoderLi

生成 JavaDoc 可以看到包的注释在说明列中

使用注解修饰包

假如某个包下、我们希望所有的返回值都应该非 Null、并且当我们编码的时候可以警告我们

那么我们可以在 package-info.java 文件中

@NonNullApi
package com.demo.test.info;
import org.springframework.lang.NonNullApi;

微信公众号:CoderLi

可以调整为 Error 那么就会要求必须返回非 null 否则会影响编译。

当然除了返回值为非 null 、还会有其他的需求、比如说参数、成语变量、甚至 Deprecated 包中的所有类、都可以在 package-info 中进行修饰。

当然这个只限于当前包、没办法让子包继承父包的相关信息、所以每个子包都需要某个特性、那么就需要每个子包创建 package-info 文件。

声明类和常量

这个跟我们自己声明一个没有修饰符修饰的类是一样的、只不过是放在 package-info 文件中

@ParametersAreNonnullByDefault
@NonNullFields
@NonNullApi
package com.demo.test.info;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;
import javax.annotation.ParametersAreNonnullByDefault;
class Constant{
    public static final String NAME = "CoderLi";
}

最终使用了 org.eclipse.jdt.annotation 插件的注解声明非空

Maven 插件

最近组内想所有的返回值、所有的方法参数、类中的成员变量如果没有声明可以为 null 默认都是非 null

所以想着使用 package-info 来警告提示、本来想着写个 idea 插件每当创建 package 的时候勾选是否创建对应 package-info 文件、文件内容是个模板、如上面的代码。后来因为项目中存在某些框架非得要 eclipse 这个 ide (在 eclipse 基础上进行过改造)、不得已使用 maven 插件

当然可以直接使用 eclipse 的 jdt 包的注解
NonNullByDefault

分享一篇相关的文章

https://juejin.cn/post/6844904110244757517

通过 maven 插件绑定到其中一个 phase 即可在使用 maven 的某个 phase 中递归创建 package-info 文件、当然也可以绑定 idea 运行前执行该插件的 goal 、这样子就能不执行 maven 命令就可以为每个 package 创建对应的 package-info 文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
org.apache.http.ConnectionClosedException.class org.apache.http.ConnectionReuseStrategy.class org.apache.http.Consts.class org.apache.http.ContentTooLongException.class org.apache.http.ExceptionLogger.class org.apache.http.FormattedHeader.class org.apache.http.Header.class org.apache.http.HeaderElement.class org.apache.http.HeaderElementIterator.class org.apache.http.HeaderIterator.class org.apache.http.HttpClientConnection.class org.apache.http.HttpConnection.class org.apache.http.HttpConnectionFactory.class org.apache.http.HttpConnectionMetrics.class org.apache.http.HttpEntity.class org.apache.http.HttpEntityEnclosingRequest.class org.apache.http.HttpException.class org.apache.http.HttpHeaders.class org.apache.http.HttpHost.class org.apache.http.HttpInetConnection.class org.apache.http.HttpMessage.class org.apache.http.HttpRequest.class org.apache.http.HttpRequestFactory.class org.apache.http.HttpRequestInterceptor.class org.apache.http.HttpResponse.class org.apache.http.HttpResponseFactory.class org.apache.http.HttpResponseInterceptor.class org.apache.http.HttpServerConnection.class org.apache.http.HttpStatus.class org.apache.http.HttpVersion.class org.apache.http.MalformedChunkCodingException.class org.apache.http.MessageConstraintException.class org.apache.http.MethodNotSupportedException.class org.apache.http.NameValuePair.class org.apache.http.NoHttpResponseException.class org.apache.http.ParseException.class org.apache.http.ProtocolException.class org.apache.http.ProtocolVersion.class org.apache.http.ReasonPhraseCatalog.class org.apache.http.RequestLine.class org.apache.http.StatusLine.class org.apache.http.TokenIterator.class org.apache.http.TruncatedChunkException.class org.apache.http.UnsupportedHttpVersionException.class org.apache.http.annotation.Contract.class org.apache.http.annotation.Experimental.class org.apache.http.annotation.Obsolete.class org.apache.http.annotation.ThreadingBehavior.class org.apache.http.annotation.package-info.class org.apache.http.concurrent.BasicFuture.class org.apache.http.concurrent.Cancellable.class org.apache.http.concurrent.FutureCallback.class org.apache.http.concurrent.package-info.class org.apache.http.config.ConnectionConfig.class org.apache.http.config.Lookup.class org.apache.http.config.MessageConstraints.class org.apache.http.config.Registry.class org.apache.http.config.RegistryBuilder.class org.apache.http.config.SocketConfig.class org.apache.http.config.package-info.class org.apache.http.entity.AbstractHttpEntity.class org.apache.http.entity.BasicHttpEntity.class org.apache.http.entity.BufferedHttpEntity.class org.apache.http.entity.ByteArrayEntity.class org.apache.http.entity.ContentLengthStrategy.class org.apache.http.entity.ContentProducer.class org.apache.http.entity.ContentType.class org.apache.http.entity.EntityTemplate.class org.apache.http.entity.FileEntity.class org.apache.http.entity.HttpEntityWrapper.class org.apache.http.entity.InputStreamEntity.class org.apache.http.entity.SerializableEntity.class org.apache.http.entity.StringEntity.class org.apache.http.entity.package-info.class org.apache.http.impl.AbstractHttpClientConnection.class org.apache.http.impl.AbstractHttpServerConnection.class org.apache.http.impl.BHttpConnectionBase.class org.apache.http.impl.ConnSupport.class org.apache.http.impl.DefaultBHttpClientConnection.class org.apache.http.impl.DefaultBHttpClientConnectionFactory.class org.apache.http.impl.DefaultBHttpServerConnection.class org.apache.http.impl.DefaultBHttpServerConnectionFactory.class org.apache.http.impl.DefaultConnectionReuseStrategy.class org.apache.http.impl.DefaultHttpClientConnection.class org.apache.http.impl.DefaultHttpRequestFactory.class org.apache.http.impl.DefaultHttpResponseFactory.class org.apache.http.impl.DefaultHttpServerConnection.class org.apache.http.impl.EnglishReasonPhraseCatalog.class org.apache.http.impl.HttpConnectionMetricsImpl.class org.apache.http.impl.NoConnectionReuseStrategy.class org.apache.http.impl.SocketHttpClientConnection.class org.apache.http.impl.SocketHttpServerConnection.class org.apache.http.impl.bootstrap.HttpServer.class org.apache.http.impl.bootstrap.RequestListener.class org.apache.http.impl.bootstrap.SSLServerSetupHandler.class org.apache.http.impl.bootstrap.ServerBootstrap.class org.apache.http.impl.bootstrap.ThreadFactoryImpl.class

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值