多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Annotation之ElementType.PACKAGE

Annotation之ElementType.PACKAGE

來源:程序員人生   發布時間:2014-04-25 13:39:52 閱讀次數:2910次

Annotation的出現,給優美的Java再添加了更廣闊的空間,讓你可以設計出更加完美,更加嘆為觀止的程序。
項目關系,用到了這個東東
在滿天下泛濫的ElementType.TYPE,ElementType.METHOD現在,Google下,就可以發現,用ElementType.PACKAGE真的少得可憐。
正因為如此,寫下此日志,給有需要的人一些參考--有關ElementType.PACKAGE

之前還是溫習下ElementType的其它各個元素

ElementType.TYPE (class, interface, enum)
ElementType.FIELD (instance variable)
ElementType.METHOD ElementType.PARAMETER
ElementType.CONSTRUCTOR
ElementType.LOCAL_VARIABLE
ElementType.ANNOTATION_TYPE (應用于另一個注解上)
ElementType.PACKAGE

當一個Annotation接口被聲明為
@Target(value=ElementType.PACKAGE)時,它即是對包的修飾注釋,看下面的例子

package com.xu.ycoe.navigator;

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

@Target(value={ElementType.PACKAGE,ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Navigator{
public String name();
public String values();
}

代碼里用到的除了ElementType.PACKAGE,其它的都很熟悉了吧,不再多說,不明的,自己Google下
上面定義了一個可在包、類、接口、方法中使用的Annotation

一般情況下,是這樣應用的:

@Navigator(name="package",values="我在包里")
package com.xu.ycoe.navigator;
@Navigator(name="class",values="我在類里")
public class NavigateManager {
@Navigator(name="method",values="我在方法里")
public void Test(){}
}
OK,但是在Eclipse下會出現一個錯誤:
Package annotations must be in file package-info.java
可郁悶透了,在Eclipse下,無法直接創建package-info.java類,原因是類名不合法,暈哦~~~
只好強行創建了,使用Eclipse下的新建文件(任意文本文件,把文件名改為package-info.java即可)
文件的內容如下:

@Navigator(name="package", values="我在包里")
package com.xu.ycoe.navigator;
//如果這個包與Annotation不在同一包下時要import進來Annotation的包
import com.xu.ycoe.navigator.Navigator;
好啦,包的注釋是不能放在某一個類里面的,而是要在此包下面新建一個package-info.java文件,在那里面寫注釋

OK,一切就序,沒有報錯了。
下面看看怎樣使用吧。
其實很簡單,直接使用java.lang.Package類就可以了,和類、方法中的Annotation使用完全一樣。

Package p = Package.getPackage("com.xu.ycoe.navigator");
if(p!=null && p.isAnnotationPresent(Navigator.class)){
Navigator nav = p.getAnnotation(Navigator.class);
if(nav !=null){
System.out.println(nav.values()+"======================="+nav.name());
}
}

但是有一個地方要注意一下,Java的包不是一下子全部一起加載,而是在使用到的時候才去加載的。
這樣,在使用Package.getPackage(String name)的時候,如果這個包下的類還沒有被加載過,就會直接返回一個null值。原因嘛,看看java源碼:

public static Package getPackage(String name){
ClassLoader l = ClassLoader.getCallerClassLoader();
if (l != null) {
return l.getPackage(name);
} else {
return getSystemPackage(name);
}
}

好了,這一點注意一下就沒什么問題了。

轉自:http://www.cnblogs.com/ycoe/

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲丶国产丶欧美一区二区三区 | 亚洲国产精品久久久久久网站 | 国产黄色免费在线观看 | 亚洲经典自拍 | 97婷婷色 | 亚洲色图欧美在线 | 国产成人午夜91精品麻豆剧场 | 亚洲精品专区一区二区欧美 | 亚洲图片校园另激情类小说 | 国内精品久久久久久久999下 | 国产第一页在线观看 | 亚州三级视频 | xxxxx影院 | 尤物在线视频观看 | 日韩一级淫片 | 天天拍久久 | 视频在线观看网站免费 | 亚洲一区二区三区国产精品 | 香蕉乱码成人久久天堂爱免费 | 免费大黄网站在线观 | 欧美精品亚洲精品日韩专区va | 欧美中文一区 | 尤物免费在线视频 | 国产第一页在线播放 | 亚洲高清视频一区 | 中文在线播放 | 国产中文字幕在线视频 | 日韩五月 | 国产精品第1页在线播放 | 国产精品亚洲精品日韩动图 | 中国高清色视频www 中国国产成人精品久久 | 视频三区精品中文字幕 | 日韩欧美一区二区精品久久 | 毛片网站网址 | 国产成人综合一区人人 | 国产一区二区亚洲精品 | 欧美极品videosvideo激情 欧美极品video粗暴 | 成人a在线观看 | 国产精品爽爽影院在线 | 精品视频在线观看免费 | 亚洲码在线中文在线观看 |