自定義Annotation
早就知道jdk5加了新特性Annotation,但是沒研究過,前幾天公司培訓(xùn),有一部分是介紹jdk5新特性的,一個(gè)是注解一個(gè)泛型
今兒復(fù)習(xí)一下注解
//用@Deprecated聲明該方法不建議使用
@Deprecated public void doSomething1(){
Map map = new HashMap();
map.put("some", "thing");
System.out.println(map);
}
//用@SuppressWarnings聲明不再進(jìn)行類型檢查
@SuppressWarnings(value={"unchecked"})
public void doSomething2(){
Map map = new HashMap();
map.put("some", "thing");
}
寫一個(gè)自定義注解先
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
//要在運(yùn)行時(shí)使用這個(gè)注解,必須聲明成RUNTIME
Annotation分為三種級別:RUNTIME、CLASS、SOURCE
@Retention(RetentionPolicy.RUNTIME)
public @interface SomeAnnotation{
String value();
String name();
}
下面來使用這個(gè)自定義注解:
import java.lang.reflect.Method;
public class AnnotationTest {
@SomeAnnotation(value="value1",name="name1")
public void doSomething3(){
}
public static void main(String[] args){
Class<AnnotationTest> c = AnnotationTest.class;
try {
//利用反射得到方法doSomething3
Method method = c.getMethod("doSomething3");
//查找doSomething3方法是否有SomeAnnotation的Annotation
if(method.isAnnotationPresent(SomeAnnotation.class)){
System.out.println("找到SomeAnnotation");
//得到SomeAnnotation
SomeAnnotation annotation = method.getAnnotation(SomeAnnotation.class);
System.out.println("annotation.value="+annotation.value());
System.out.println("annotation.name="+annotation.name());
}else{
System.out.println("沒有找到omeAnnotation");
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
輸出結(jié)果:
找到SomeAnnotation
annotation.value=value1
annotation.name=name1