- Java.lang 包類
- Java.lang - 首頁
- Java.lang - Boolean
- Java.lang - Byte
- Java.lang - Character
- Java.lang - Character.Subset
- Java.lang - Character.UnicodeBlock
- Java.lang - Class
- Java.lang - ClassLoader
- Java.lang - Compiler
- Java.lang - Double
- Java.lang - Enum
- Java.lang - Float
- Java.lang - InheritableThreadLocal
- Java.lang - Integer
- Java.lang - Long
- Java.lang - Math
- Java.lang - Number
- Java.lang - Object
- Java.lang - Package
- Java.lang - Process
- Java.lang - ProcessBuilder
- Java.lang - Runtime
- Java.lang - RuntimePermission
- Java.lang - SecurityManager
- Java.lang - Short
- Java.lang - StackTraceElement
- Java.lang - StrictMath
- Java.lang - String
- Java.lang - StringBuffer
- Java.lang - StringBuilder
- Java.lang - System
- Java.lang - Thread
- Java.lang - ThreadGroup
- Java.lang - ThreadLocal
- Java.lang - Throwable
- Java.lang - Void
- Java.lang 包其他內容
- Java.lang - 介面
- Java.lang - 錯誤
- Java.lang - 異常
- Java.lang 包有用資源
- Java.lang - 有用資源
- Java.lang - 討論
Java 包 getAnnotation() 方法
描述
Java 包 getAnnotation(Class<A> annotationClass) 方法如果存在此元素的指定型別的註釋,則返回該元素的註釋,否則返回 null。
宣告
以下是 java.lang.Package.getAnnotation() 方法的宣告
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
引數
annotationClass − 與註釋型別對應的 Class 物件
返回值
如果此元素上存在指定註釋型別,則此方法返回此元素的註釋,否則返回 null
異常
NullPointerException − 如果給定的註釋類為 null
IllegalMonitorStateException − 如果當前執行緒不是物件監視器的所有者。
獲取給定型別的註釋示例
以下示例顯示了 getAnnotation() 方法的用法。在此程式中,我們已將一個註釋 Demo 宣告為一個介面,其中包含一個返回字串的方法和另一個返回整數值的方法。在 PackageDemo 類中,我們在一個名為 example() 的方法上應用了該註釋 Demo,並賦予了一些值。在 example() 方法中,我們使用 getClass() 方法檢索了 PackageDemo 類的類。
現在使用 getMethod() 示例,我們檢索了 example 方法例項,然後使用 getAnnotation() 方法,我們將 Demo 類作為引數傳遞以獲取註釋物件。然後使用註釋物件獲取分配給應用的註釋的值。在 main 方法中,呼叫了此 example() 方法並列印結果。
package com.tutorialspoint;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
// declare a new annotation
@Retention(RetentionPolicy.RUNTIME)
@interface Demo {
String str();
int val();
}
public class PackageDemo {
// set values for the annotation
@Demo(str = "Demo Annotation", val = 100)
// a method to call in the main
public static void example() {
PackageDemo ob = new PackageDemo();
try {
Class c = ob.getClass();
// get the method example
Method m = c.getMethod("example");
// get the annotation for class Demo
Demo annotation = m.getAnnotation(Demo.class);
// print the annotation
System.out.println(annotation.str() + " " + annotation.val());
} catch (NoSuchMethodException exc) {
exc.printStackTrace();
}
}
public static void main(String args[]) {
example();
}
}
輸出
讓我們編譯並執行以上程式,這將產生以下結果:
Demo Annotation 100
獲取給定型別的註釋時遇到異常的示例
以下示例顯示了 getAnnotation() 方法的用法。在此程式中,我們已將一個註釋 Demo 宣告為一個介面,其中包含一個返回字串的方法和另一個返回整數值的方法。在 PackageDemo 類中,我們在一個名為 example() 的方法上應用了該註釋 Demo,並賦予了一些值。在 example() 方法中,我們使用 getClass() 方法檢索了 PackageDemo 類的類。
現在使用 getMethod() 示例,我們檢索了 example 方法例項,然後使用 getAnnotation() 方法,我們將 null 作為引數傳遞以獲取註釋物件。由於這會導致 NullPointerException,因此當程式執行時,異常處理程式塊會列印錯誤訊息。
package com.tutorialspoint;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
// declare a new annotation
@Retention(RetentionPolicy.RUNTIME)
@interface Demo {
String str();
int val();
}
public class PackageDemo {
// set values for the annotation
@Demo(str = "Demo Annotation", val = 100)
// a method to call in the main
public static void example() {
PackageDemo ob = new PackageDemo();
try {
Class c = ob.getClass();
// get the method example
Method m = c.getMethod("example");
// get the annotation
Demo annotation = m.getAnnotation(null);
if(annotation != null) {
// print the annotation
System.out.println(annotation.str() + " " + annotation.val());
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
example();
}
}
輸出
讓我們編譯並執行以上程式,這將產生以下結果:
java.lang.NullPointerException at java.base/java.util.Objects.requireNonNull(Objects.java:233) at java.base/java.lang.reflect.Executable.getAnnotation(Executable.java:599) at java.base/java.lang.reflect.Method.getAnnotation(Method.java:793) at com.tutorialspoint.PackageDemo.example(PackageDemo.java:29) at com.tutorialspoint.PackageDemo.main(PackageDemo.java:40)