日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java接口废弃注释_Java注释Override、Deprecated、SuppressWarnings详解

發布時間:2023/12/9 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java接口废弃注释_Java注释Override、Deprecated、SuppressWarnings详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

四、如何對注釋進行注釋

這一節的題目讀起來雖然有些繞口,但它所蘊涵的知識卻對設計更強大的java程序有很大幫助。

在上一節討論了自定義注釋,由此我們可知注釋在J2SE5.0中也和類、接口一樣。是程序中的一個基本的組成部分。既然可以對類、接口進行注釋,那么當然也可以對注釋進行注釋。

使用普通注釋對注釋進行注釋的方法和對類、接口進行注釋的方法一樣。所不同的是,J2SE5.0為注釋單獨提供了4種注釋。它們是Target、Retention、Documented和Inherited。下面就分別介紹這4種注釋。

Target

這個注釋理解起來非常簡單。由于target的中文意思是“目標”,因此,我們可能已經猜到這個注釋和某一些目標相關。那么這些目標是指什么呢?大家可以先看看下面的代碼。

@Target(ElementType.METHOD)

@interface MyAnnotation {}

@MyAnnotation // 錯誤的使用

public class Class1

{

@MyAnnotation // 正確的使用

public void myMethod1() {}

}

以上代碼定義了一個注釋MyAnnotation和一個類Class1,并且使用MyAnnotation分別對Class1和myMethod1進行注釋。如果編譯這段代碼是無法通過的。也許有些人感到驚訝,沒錯啊!但問題就出在@Target(ElementType.METHOD)上,由于Target使用了一個枚舉類型屬性,它的值是ElementType.METHOD。這就表明MyAnnotation只能為方法注釋。而不能為其它的任何語言元素進行注釋。因此,MyAnnotation自然也不能為Class1進行注釋了。

說到這,大家可能已經基本明白了。原來target所指的目標就是java的語言元素。如類、接口、方法等。當然,Target還可以對其它的語言元素進行限制,如構造函數、字段、參數等。如只允許對方法和構造函數進行注釋可以寫成:

@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})

@interface MyAnnotation {}

Retention

既然可以自定義注釋,當然也可以讀取程序中的注釋(如何讀取注釋將在下一節中討論)。但是注釋只有被保存在class文件中才可以被讀出來。而Retention就是為設置注釋是否保存在class文件中而存在的。下面的代碼是Retention的詳細用法。

@Retention(RetentionPolicy.SOURCE)

@interface MyAnnotation1 { }

@Retention(RetentionPolicy.CLASS)

@interface MyAnnotation2 {}

@Retention(RetentionPolicy.RUNTIME)

@interface MyAnnotation3 {}

其中第一段代碼的作用是不將注釋保存在class文件中,也就是說象“//”一樣在編譯時被過濾掉了。第二段代碼的作用是只將注釋保存在class文件中,而使用反射讀取注釋時忽略這些注釋。第三段代碼的作用是即將注釋保存在class文件中,也可以通過反射讀取注釋。

Documented

這個注釋和它的名子一樣和文檔有關。在默認的情況下在使用javadoc自動生成文檔時,注釋將被忽略掉。如果想在文檔中也包含注釋,必須使用Documented為文檔注釋。

@interface MyAnnotation{ }

@MyAnnotation

class Class1

{

public void myMethod() { }

}

使用javadoc為這段代碼生成文檔時并不將@MyAnnotation包含進去。生成的文檔對Class1的描述如下:

class Class1extends java.lang.Object

而如果這樣定義MyAnnotation將會出現另一個結果。

@Documented

@interface MyAnnotation {}

生成的文檔:

@MyAnnotation // 這行是在加上@Documented后被加上的

class Class1extends java.lang.Object

Inherited

繼承是java主要的特性之一。在類中的protected和public成員都將會被子類繼承,但是父類的注釋會不會被子類繼承呢?很遺憾的告訴大家,在默認的情況下,父類的注釋并不會被子類繼承。如果要繼承,就必須加上Inherited注釋。

@Inherited

@interface MyAnnotation { }

@MyAnnotation

public class ParentClass {}

public class ChildClass extends ParentClass { }

在以上代碼中ChildClass和ParentClass一樣都已被MyAnnotation注釋了。

五、如何使用反射讀取注釋

前面討論了如何自定義注釋。但是自定義了注釋又有什么用呢?這個問題才是J2SE5.0提供注釋的關鍵。自定義注釋當然是要用的。那么如何用呢?解決這個問題就需要使用java最令人興奮的功能之一:反射(reflect)。

在以前的JDK版本中,我們可以使用反射得到類的方法、方法的參數以及其它的類成員等信息。那么在J2SE5.0中同樣也可以象方法一樣得到注釋的各種信息。

在使用反射之前必須使用import java.lang.reflect.* 來導入和反射相關的類。

如果要得到某一個類或接口的注釋信息,可以使用如下代碼:

Annotation annotation = TestAnnotation.class.getAnnotation(MyAnnotation.class);

如果要得到全部的注釋信息可使用如下語句:

Annotation[] annotations = TestAnnotation.class.getAnnotations();

Annotation[] annotations = TestAnnotation.class.getDeclaredAnnotations();

getDeclaredAnnotations與getAnnotations類似,但它們不同的是getDeclaredAnnotations得到的是當前成員所有的注釋,不包括繼承的。而getAnnotations得到的是包括繼承的所有注釋。

如果要得到其它成員的注釋,可先得到這個成員,然后再得到相應的注釋。如得到myMethod的注釋。

Method method = TestAnnotation.class.getMethod("myMethod", null);

Annotation annotation = method.getAnnotation(MyAnnotation.class);

注:要想使用反射得到注釋信息,這個注釋必須使用

@Retention(RetentionPolicy.RUNTIME)進行注釋。

總結

注釋是J2SE5.0提供的一項非常有趣的功能。它不但有趣,而且還非常有用。EJB3規范就是借助于注釋實現的。這樣將使EJB3在實現起來更簡單,更人性化。還有Hibernate3除了使用傳統的方法生成hibernate映射外,也可以使用注釋來生成hibernate映射。總之,如果能將注釋靈活應用到程序中,將會使你的程序更加簡潔和強大。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java接口废弃注释_Java注释Override、Deprecated、SuppressWarnings详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。