另类的package-info.java文件探讨
首先,它不能随便被创建。在Eclipse中, package-info文件不能随便被创建,会报“Type name is notvalid”错误,类名无效,Java变量定义规范是:字母、数字、下划线,还有那个不怎么常用的$符号(顺带说下,Java是支持中文名称的变量,习惯挑战的同学可以尝试下,分享一下这方面的经验),这个中划线可不再之列,那怎么创建这个文件呢?
很简单,用记事本创建一个,然后拷贝进去再改一下就成了,更直接的办法就是从别的项目中拷贝过来一个,这更方便。
其实还有几个特殊的地方,比如不可以继承,没有接口,没有类间关系(关联、组合、聚合等等)等。
这个文件的特殊性说完了,那再说说它有什么作用,它有三个作用:
1、为标注在包上Annotation提供便利;
2、声明友好类和包常量;
3、提供包的整体注释说明。
为标注在包上Annotation提供便利
-
- @Target(ElementType.PACKAGE)
- @Retention(RetentionPolicy.RUNTIME)
-
public
@interface PkgAnnotation { - }
@Target(ElementType.PACKAGE) @Retention(RetentionPolicy.RUNTIME) public @interface PkgAnnotation { }
- @PkgAnnotation
-
package
com.company;
@PkgAnnotation package com.company;
-
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 ,which is be placed on package!"); -
-
} -
} -
} - }
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 ,which is be placed on package!"); } } } }
Hi,I'm the PkgAnnotation ,which is be placed on package! |
声明友好类和包常量
- @PkgAnnotation
- package
com.company; -
//这里是包类,声明一个包使用的公共类,强调的是包访问权限 - class
PkgClass{ -
public void test(){ -
} - }
- //包常量,只运行包内访问,适用于分“包”开发
- class
PkgConst{ -
static final String PACAKGE_CONST="ABC"; - }
@PkgAnnotation package com.company; //这里是包类,声明一个包使用的公共类,强调的是包访问权限 class PkgClass{ public void test(){ } } //包常量,只运行包内访问,适用于分“包”开发 class PkgConst{ static final String PACAKGE_CONST="ABC"; }
-
-
package
com.company;
package com.company;
http://blog.csdn.net/antswallow/article/details/6277079