Java アノテーションはコードに関する情報を提供しますが、アノテーションが付けられたコードの内容には直接影響しません。このチュートリアルでは、Java アノテーション、アノテーションのカスタマイズ方法、その使用法、およびリフレクションを通じてアノテーションを解析する方法について学びます。
Java 1.5 ではアノテーションが導入され、現在 Hibernate、Jersey、Spring などの多くの Java フレームワークで広く使用されています。アノテーションは、プログラムのメタデータとしてプログラムに埋め込まれます。注釈は、一部の解析ツールまたはコンパイル ツールで解析できます。コンパイルまたは実行中に影響を与えるアノテーションを宣言することもできます。
アノテーションを使用する前は、プログラムのソースデータはJavaアノテーションとjavadocのみを通過していましたが、アノテーションによって提供される機能はこれらをはるかに超えています。注釈にはメタデータが含まれるだけでなく、注釈インタープリタは注釈を通じてプログラムの実行順序を決定することもできます。たとえば、Jersey Web サービスでは、**PATH** アノテーションを URI 文字列の形式でメソッドに追加します。その後、プログラムの実行中に、Jersey インタプリタが指定された URI を呼び出すメソッドを決定します。
Java カスタム アノテーションの作成
カスタム アノテーションの作成はインターフェイスの作成と似ていますが、アノテーションのインターフェイス キーワードは @ 記号で始まる必要があります。アノテーションのメソッドを宣言できます。まずアノテーションの例を見て、次にその機能のいくつかについて説明します。
package com.journaldev.annotations; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Documented @Target(ElementType.METHOD) @Inherited @Retention(RetentionPolicy.RUNTIME) public @interface MethodInfo{ String author() default 'Pankaj'; String date(); int revision() default 1; String comments(); }
アノテーション メソッドはパラメータを持つことができません。
アノテーション メソッドの戻り値の型は、基本型、String、Enum、Annotation、またはこれらの型の配列に限定されます。
アノテーション メソッドはデフォルト値を持つことができます。 ;
注釈自体には、他の注釈を付けるために使用されるメタ注釈を含めることができます。
メタアノテーションには 4 つのタイプがあります:
1. @Documented - このアノテーションを持つ要素が javadoc などのツールで文書化できることを示します。この型は、注釈付き要素を使用してクライアント宣言に影響を与える型に注釈を付けるために使用する必要があります。宣言に Documented の注釈が付けられている場合、このタイプの注釈は、注釈が付けられたプログラム メンバーのパブリック API として使用されます。
2. @Target—このタイプのアノテーションがアノテーションを付けることができるプログラム要素の範囲を示します。このメタアノテーションの値は、TYPE、METHOD、CONSTRUCTOR、FIELD などです。 Target メタアノテーションが存在しない場合、定義されたアノテーションはプログラムの任意の要素に適用できます。
3. @Inherited - 注釈タイプが自動的に継承されることを示します。ユーザーが現在のクラスでこのメタ アノテーション タイプをクエリし、現在のクラスの宣言にこのメタ アノテーション タイプが含まれていない場合、現在のクラスの親クラスも自動的にクエリされ、継承されたメタ アノテーションがあるかどうかが確認されます。 -annotation であり、このアノテーション タイプが見つかるまで、または最上位の親クラスがクエリされるまで、このアクションは繰り返し実行されます。
4.@Retention—注釈が保持される期間を示します。 RetentionPolicy の値は、SOURCE、CLASS、および RUNTIME です。
Java の組み込みアノテーション
Java には 3 つの組み込みアノテーションが用意されています。
1. @Override - 親クラスのメソッドをオーバーライドしたい場合は、このアノテーションを使用して、このメソッドをオーバーライドしたいことをコンパイラーに伝える必要があります。このようにして、親クラスのメソッドが削除または変更されると、コンパイラはエラー メッセージを表示します。
2. @Deprecated - 特定のメソッドが非推奨であることをコンパイラーに知らせたい場合は、このアノテーションを使用する必要があります。 Java では、javadoc でこのアノテーションを使用することを推奨しており、このメソッドが非推奨である理由と代替手段を提供する必要があります。
3. @SuppressWarnings - これは、ジェネリックでのネイティブ データ型の使用など、特定の警告メッセージを無視するようにコンパイラーに指示するだけです。その保持ポリシーは SOURCE (翻訳者注: ソース ファイル内で有効) であり、コンパイラによって破棄されます。
上記のカスタム アノテーションを参照しながら、Java の組み込みアノテーションの例を見てみましょう。
package com.journaldev.annotations; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; public class AnnotationExample { public static void main(String[] args) { } @Override @MethodInfo(author = 'Pankaj', comments = 'Main method', date = 'Nov 17 2012', revision = 1) public String toString() { return 'Overriden toString method'; } @Deprecated @MethodInfo(comments = 'deprecated method', date = 'Nov 17 2012') public static void oldMethod() { System.out.println('old method, don't use it.'); } @SuppressWarnings({ 'unchecked', 'deprecation' }) @MethodInfo(author = 'Pankaj', comments = 'Main method', date = 'Nov 17 2012', revision = 10) public static void genericsTest() throws FileNotFoundException { List l = new ArrayList(); l.add('abc'); oldMethod(); } }
この例は一目瞭然で、さまざまなシナリオでの応用例を示すことができると思います。
Java アノテーション解析
リフレクション技術を使用して Java クラスのアノテーションを解析します。次に、アノテーションの RetentionPolicy を RUNTIME に設定する必要があります。そうしないと、実行中に Java クラスのアノテーション情報が利用できなくなり、そこからアノテーション関連のデータを取得できなくなります。
package com.journaldev.annotations; import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class AnnotationParsing { public static void main(String[] args) { try { for (Method method : AnnotationParsing.class .getClassLoader() .loadClass(('com.journaldev.annotations.AnnotationExample')) .getMethods()) { // checks if MethodInfo annotation is present for the method if (method.isAnnotationPresent(com.journaldev.annotations.MethodInfo.class)) { try { // iterates all the annotations available in the method for (Annotation anno : method.getDeclaredAnnotations()) { System.out.println('Annotation in Method ''+ method + '' : ' + anno); } MethodInfo methodAnno = method.getAnnotation(MethodInfo.class); if (methodAnno.revision() == 1) { System.out.println('Method with revision no 1 = '+ method); } } catch (Throwable ex) { ex.printStackTrace(); } } } } catch (SecurityException | ClassNotFoundException e) { e.printStackTrace(); } } }
上記のプログラムを実行すると次の出力が得られます:
Annotation in Method 'public java.lang.String com.journaldev.annotations.AnnotationExample.toString()' : @com.journaldev.annotations.MethodInfo(author=Pankaj, revision=1, comments=Main method, date=Nov 17 2012) Method with revision no 1 = public java.lang.String com.journaldev.annotations.AnnotationExample.toString() Annotation in Method 'public static void com.journaldev.annotations.AnnotationExample.oldMethod()' : @java.lang.Deprecated() Annotation in Method 'public static void com.journaldev.annotations.AnnotationExample.oldMethod()' : @com.journaldev.annotations.MethodInfo(author=Pankaj, revision=1, comments=deprecated method, date=Nov 17 2012) Method with revision no 1 = public static void com.journaldev.annotations.AnnotationExample.oldMethod() Annotation in Method 'public static void com.journaldev.annotations.AnnotationExample.genericsTest() throws java.io.FileNotFoundException' : @com.journaldev.annotations.MethodInfo(author=Pankaj, revision=10, comments=Main method, date=Nov 17 2012)
これがこのチュートリアルの全内容です。ここから何かを学んでいただければ幸いです。
上記は Java アノテーション チュートリアルとカスタム アノテーションの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

javadevelopmentisnotentirelylylypratform-IndopentDuetoseveralfactors.1)jvmvariationsaffectperformanceandbehavioracrossdifferentos.2)nativeLibrariesviajniintroducePlatform-specificissues.3)giaiasystemsdifferbeTioneplateplatifflics.4)

Javaコードは、さまざまなプラットフォームで実行するときにパフォーマンスの違いがあります。 1)JVMの実装と最適化戦略は、OracleJDKやOpenJDKなどとは異なります。 2)メモリ管理やスレッドスケジューリングなどのオペレーティングシステムの特性もパフォーマンスに影響します。 3)適切なJVMを選択し、JVMパラメーターとコード最適化を調整することにより、パフォーマンスを改善できます。

java'splatformindepentedencehaslimitationsincludingporformanceoverhead、versioncompatibulisisues、changleSwithnativeLibraryIntegration、プラットフォーム固有の機能、およびjvminStallation/maintenation。

PlatformEndependEncealLowsProgramStorunonAnyPlatformWithOdification、whilecross-platformdevelopmentReadreessomeplatform-specificAdjustments.platformindependence、explifiedByjava、unableSiversAlexecutionButMayCompromperformance

jitcompalilationinjavaenhancesperformance whelemaintaining formindepence.1)itdynamicallyTrantesiNTODENATIVEMACHINECODEATRUNTIME、最適化されたコードを最適化すること、

javaispopularforsoss-platformdesktopapplicationsduetoits "writeonce、runaynay" philosophy.1)itusesbytecodatiTatrunnanyjvm-adipplatform.2)ライブラリリケンディンガンドジャヴァフククレアティック - ルルクリス

Javaでプラットフォーム固有のコードを作成する理由には、特定のオペレーティングシステム機能へのアクセス、特定のハードウェアとの対話、パフォーマンスの最適化が含まれます。 1)JNAまたはJNIを使用して、Windowsレジストリにアクセスします。 2)JNIを介してLinux固有のハードウェアドライバーと対話します。 3)金属を使用して、JNIを介してMacOSのゲームパフォーマンスを最適化します。それにもかかわらず、プラットフォーム固有のコードを書くことは、コードの移植性に影響を与え、複雑さを高め、パフォーマンスのオーバーヘッドとセキュリティのリスクをもたらす可能性があります。

Javaは、クラウドネイティブアプリケーション、マルチプラットフォームの展開、および言語間の相互運用性を通じて、プラットフォームの独立性をさらに強化します。 1)クラウドネイティブアプリケーションは、GraalvmとQuarkusを使用してスタートアップ速度を向上させます。 2)Javaは、埋め込みデバイス、モバイルデバイス、量子コンピューターに拡張されます。 3)Graalvmを通じて、JavaはPythonやJavaScriptなどの言語とシームレスに統合して、言語間の相互運用性を高めます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









