Java中的@inherited是一個註解,用來標記一個註解要繼承給被註解類別的子類別。 @inherited 是一個內建註釋,我們知道註釋就像一個代表元資料的標籤,它向編譯器提供附加資訊。與 Javadoc 中存在的內建註解相同,可以在 java.lang.java 文件中建立另一個元註解。實際上有兩種類型的註釋,一種類型的註釋應用於 java 程式碼,如 @override,另一種類型的註釋應用於其他註釋,如 @target @inherited。所以@inherited是一個註釋,應用於我們想要建立子類別或我們想要繼承以使另一個使用者定義註釋的其他註釋。
廣告 該類別中的熱門課程 JAVA 掌握 - 專業化 | 78 課程系列 | 15 次模擬測驗開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
文法
java中@inherited的語法是-
@Inherited public @interface MyAnnotation {// code of the MyAnnotation } @MyAnnotation public class SuperClass { // code of the SuperClass } public class SubClass extends SuperClass { // code of the SubClass }
如上面的語法,類別SubClass繼承自註解@MyAnnotation,因為它繼承自SuperClass,而SuperClass有一個@MyAnnotation註解。
@Inherited 在 Java 中如何運作?
@Inherited 註解用於或註解到註解(如上述語法中的 MyAnnotation),@interface 應為其添加前綴。接下來,可以在需要應用@MyAnnotation 的地方使用此註釋(MyAnnotation)。這些註解可以在元素宣告之前應用,也可以應用於程式的任何元素,如變數、類別、建構子、方法等。當此使用者定義的註解被註釋在超類別上時,它會自動繼承到子類別(如上面語法中的子類別),正如我們在下面的範例中看到的那樣。
在 Java 中實作 @Inherited 註解的範例
接下來,我們寫java程式碼來更清楚地理解@Inherited註解,下面的範例中我們使用@Inherited註解在子類別中從超類別繼承,如下 –
範例#1
首先,我們建立一個註解介面@MyAnnotation,它有兩個字段,名稱和程式碼。
程式碼://MyAnnotation.java
package demo; import java.lang.annotation.Inherited; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Inherited @Target ({ElementType.TYPE, ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) public @interface MyAnnotation { String name () default "unknown"; String code () default " "; }
接下來,我們建立一個超類別來透過註釋任何類別、方法或變數來使用上述註釋,並提供狀態名稱和狀態程式碼。
程式碼://Super.java
package demo; import demo.MyAnnotation; @MyAnnotation (name = "Karnataka", code = "KA") public class Super { public String getstateinfo () { return null; } }
接下來,我們使用註解,因為它是元數據,這意味著我們應該能夠獲取這個元數據或信息,以便在需要時使用註解信息。
程式碼://Demo.java
//as sub class package demo; import demo.MyAnnotation; import demo.Super; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Method; public class Demo extends Super { public static void main ( String[] arg ) throws Exception { new Super (); Class <super>obj = Super.class; getstateinfo (obj); Method m = obj.getMethod ("getstateinfo", new Class[]{}); getstateinfo (m); } static void getstateinfo (AnnotatedElement e) { try { System.out.println ("Finding annotations on " + e.getClass ().getName ()); Annotation[] annotations = e.getAnnotations (); for (Annotation a : annotations) { if (a instanceof MyAnnotation) { MyAnnotation stateInfo = (MyAnnotation) a; System.out.println("Name of Annotation :" + stateInfo.annotationType ()); System.out.println("State Name :" + stateInfo.name ()); System.out.println("State code :" + stateInfo.code ()); System.out.println(new Demo ().getClass ().getAnnotation (MyAnnotation.class)); System.out.println(new Super ().getClass ().getAnnotation (MyAnnotation.class)); } } } catch (Exception ex) { System.out.println( ex ); } } }</super>
輸出:當我們執行 Demo.java 類別時,輸出為。
說明: 如上面的程式碼所示,MyAnnotation 註解是創建的,並且也由 @Inherited 註解。在超類別中,MyAnnotation 註解由 @MyAnnotation 語句使用並註釋到類別中。並且創建了另一個類Demo,它是Superclass的子類,因為它擴展為Superclass。再往前,在Demo 類別的main() 方法中,建立了一個Superclass 的對象,並存取其方法getstateinfo(),透過該方法迭代其所有註釋並檢查該註釋是否是MyAnnotation 的,如果是則列印一些正如我們在上面看到的資訊。但一件重要的事情是,Demo 類別或其任何元素沒有註釋到 MyAnnotation,但它仍然顯示 MyAnnotation 註解到此類,因為它是超類別固有的,而超類別繼承了 MyAnnotation。
接下來,我們重寫上面的java程式碼,以便更清楚地理解@Inherited註解,下面的例子中我們不會使用@Inherited註解來註解MyAnnotation(如上例中創建的註解)來檢查該註解是否被繼承是否位於其超類別的子類別中,如下所示–
範例#2
我們將保持Super.java 和Demo.java 類別與上方相同,在這些類別中不進行任何更改,但在MyAnnotation.java 類別中,我們做很少的更改,只是刪除@Inherited 註解以從MyAnnotation進行註釋,正如我們在下面看到的–
程式碼://MyAnnotation.java
package demo; import java.lang.annotation.Inherited; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // no @Inherited @Target ({ElementType.TYPE, ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) public @interface MyAnnotation { String name () default "unknown"; String code () default " "; }
輸出: 接下來,當我們執行 Demo.java 類別時,輸出為。
說明:如上面的輸出,我們可以看到,在狀態代碼之後,印了「null」值,即語句「new Demo ().getClass () 的回傳值」.getAnnotation (MyAnnotation.class)”,這意味著演示類別沒有從其超類別繼承(或註解)任何MyAnnotation註解,因為@Inherited註解沒有註解到MyAnnotation以在子類別中繼承它。
結論
java中的@inherited是一個應用於另一個註解的內建註解。它用於標記要繼承到被註解類別的子類別的註解。 @inherited 在 java.lang.annotation.Inherited 套件中可用。
以上是Java @Inherited的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版