`
budairenqin
  • 浏览: 201526 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于package-info.java

 
阅读更多
    以前不知道有package-info.java这个类,读javac源码在”输出符号表“的处理中碰到了它,于是简单研究一下

1.package-info.java用于描述当前包的信息

2.创建它的办法
    在Eclipse中创建这个类名是不被允许的,会报"Type name is notvalid"错误(java类名是不允许有中划线"-"的),可以先在Eclipse之外创建package-info.java然后拖入Eclipse中

3.package-info.java不能声明package-info类的实现(因为package-info.java被编译后其实是一个interface)
    找到package-info.class文件,命令行输入 javap -v package-info,如下图:




package-info.java有以下作用:
1.声明友好类和包内访问常量
2.为在包上标注注解提供便利
3.提供包的整体注释说明


编写测试类:


package com.enter.test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Package declaration
 */
@Target(ElementType.PACKAGE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyPackageAnnoation {
    
}

@MyPackageAnnoation     // 包上注解
package com.enter.test;

/**
 * 包内方法
 */
class MyPackageMethod {
    public void myPackageMethod() {
        System.out.println("MyPackageMethod...");
    }
}

/**
 * 包内常量
 */
class MyPackageConst {
    static final java.lang.String PACKAGE_STRING = "myPackageConst";
}


package com.enter.test;

import java.lang.annotation.Annotation;

public class PkgInfoTest {
    
    public static void main(String[] args) {
        // ===========================友好类和包内访问常量==============
        new MyPackageMethod().myPackageMethod();
        System.out.println(MyPackageConst.PACKAGE_STRING);
        
        // ===========================包上注解=========================
        Package pkg = Package.getPackage("com.enter.test");
        for (Annotation annotation : pkg.getAnnotations())
            System.out.println(annotation.annotationType().getName());
    }
}

输出:
MyPackageMethod...
myPackageConst
com.enter.test.MyPackageAnnoation


提供包的整体注释说明请参照这里
  • 大小: 5.4 KB
  • 大小: 4.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics