package-info.java 作用及用法详解
这个文件的特殊性说完了,那再说说它有什么作用,它有三个作用:
- 为标注在包上Annotation提供便利;
- 声明友好类和包常量;
- 提供包的整体注释说明。
我们来建立一个项目演示这三个作用,建立一个package-info的Java Project,在com.company包三个类:package-info.java是我们重点关注的,PkgAnnotation.java是一个标注在包上的注解定义,Client.java模拟业务操作类。其结构如下图:
为标注在包上Annotation提供便利
首先定义一个包类型的注解,它只能放置的一个包上:
Java代码
/** * 定义只能标注在package上的注解 */ @Target(ElementType.PACKAGE) @Retention(RetentionPolicy.RUNTIME) public @interface PkgAnnotation { }
再定义一个package-info类,这个是一个特殊的类,先看代码:
@PkgAnnotation package com.company;
很简单,就这么个文件,里面啥都没有,就这两句话,没有class类,没有常变量声明。接着写一个模拟交易类,代码如下
Java代码:
public class Client { public static void main(String[] args) { //可以通过I/O操作或配置项获得包名 String pkgName = "com.company"; Package pkg = Package.getPackage(pkgName); //获得包上的注解 Annotation[] annotations = pkg.getAnnotations(); //遍历注解数组 for(Annotation an:annotations){ if(an instanceof PkgAnnotation){ System.out.println("Hi,I'm the PkgAnnotation"); /* * 注解操作 * MyAnnotation myAnn = (PkgAnnotation)an; * 还可以操作该注解包下的所有类,比如初始化,检查等等 * 类似Struts的@Namespace,可以放到包名上,标明一个包的namespace路径 */ } } } }
运行结果如下所示:
Hi,I'm the PkgAnnotation!