ホームページ  >  記事  >  Java  >  Java カスタム アノテーション インターフェイス実装ソリューション

Java カスタム アノテーション インターフェイス実装ソリューション

高洛峰
高洛峰オリジナル
2017-01-23 15:26:551868ブラウズ

Java アノテーションはコードに付加されたメタ情報であり、コンパイル時や実行時に解析して使用するために一部のツールによって使用され、説明と構成の機能を果たします。
アノテーションはコードの実際のロジックに影響を与えることはなく、影響を与えることはできません。アノテーションはサポート的な役割を果たすだけです。 java.lang.annotation パッケージに含まれています。
1. メタアノテーション
メタアノテーションとは、アノテーションのアノテーションを指します。 @Retention @Target @Document @Inherited の 4 種類です。
1.1、@Retention: アノテーションの保持ポリシーを定義します
Java コード

@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含 
@Retention(RetentionPolicy.CLASS) //默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得, 
@Retention(RetentionPolicy.RUNTIME)//注解会在class字节码文件中存在,在运行时可以通过反射获取到

1.2. @Target: アノテーションの目的を定義します
Java コード

@Target(ElementType.TYPE) //接口、类、枚举、注解 
@Target(ElementType.FIELD) //字段、枚举的常量 
@Target(ElementType.METHOD) //方法 
@Target(ElementType.PARAMETER) //方法参数 
@Target(ElementType.CONSTRUCTOR) //构造函数 
@Target(ElementType.LOCAL_VARIABLE)//局部变量 
@Target(ElementType.ANNOTATION_TYPE)//注解 
@Target(ElementType.PACKAGE) ///包

elementType には複数のアノテーションを含めることができ、クラス、メソッド、フィールドなどにアノテーションを付けることができます
1.3. @Document: アノテーションが javadoc に含まれることを示します
1.4. @Inherited: サブクラスが親クラスのアノテーションを継承できることを示します
以下はカスタム アノテーションの例です
2.定義
Java コード

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface HelloWorld { 
public String name() default ""; 
}

3. アノテーションの使用、テスト クラス
Java コード

public class SayHello { 
@HelloWorld(name = " 小明 ") 
public void sayHello(String name) { 
System.out.println(name + "say hello world!"); 
}//www.heatpress123.net 
}

4. アノテーションの解析
Java のリフレクション メカニズムが役立ちます。コードは次のとおりです:
Java コード

public class AnnTest { 
public void parseMethod(Class<?> clazz) { 
Object obj; 
try { 
// 通过默认构造方法创建一个新的对象 
obj = clazz.getConstructor(new Class[] {}).newInstance( 
new Object[] {}); 
for (Method method : clazz.getDeclaredMethods()) { 
HelloWorld say = method.getAnnotation(HelloWorld.class); 
String name = ""; 
if (say != null) { 
name = say.name(); 
System.out.println(name); 
method.invoke(obj, name); 
} 
} 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
public static void main(String[] args) { 
AnnTest t = new AnnTest(); 
t.parseMethod(SayHello.class); 
} 
}

その他の Java カスタマイズアノテーションインターフェイス実装ソリューションに関連する記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。