Java の深い理解: アノテーションの基本概念
アノテーション(注釈)とは:
アノテーション(注釈)とは、Javaがメタプログラム内の要素に任意の情報と任意のメタデータ(メタデータ)を関連付けるための方法とメソッドを提供することです。アノテーション (annotation) は、プログラムがリフレクションを通じて指定されたプログラム要素の Annotation オブジェクトを取得し、Annotation オブジェクトを通じてアノテーション内のメタデータを取得できるインターフェースです。
アノテーションはJDK5.0以降のバージョンで導入されました。これは、ドキュメントの作成、コード内の依存関係の追跡、さらには基本的なコンパイル時のチェックの実行にも使用できます。ある意味、アノテーションは修飾子のように使用され、パッケージ、型、コンストラクター、メソッド、メンバー変数、パラメーター、およびローカル変数の宣言に適用されます。この情報は、Annotation の「name=value」構造ペアに格納されます。
Annotationのメンバーは、Annotation型のパラメータのないメソッドの形で宣言されます。そのメソッド名と戻り値によって、メンバーの名前と型が定義されます。ここには特定のデフォルト構文があります。任意の Annotation メンバーのデフォルト値を宣言できます。Annotation は、デフォルト値を定義しない Annotation メンバーの値として、name=value ペアを使用できます。もちろん、名前です。 =value ペアを使用して、他のメンバーのデフォルト値をオーバーライドすることもできます。これは、クラスの継承特性に似ています。親クラスのコンストラクターは、サブクラスのデフォルトのコンストラクターとして使用できますが、サブクラスによってオーバーライドすることもできます。
アノテーションを使用すると、任意の情報を特定のプログラム要素(クラス、メソッド、メンバー変数など)に関連付けることができます。ここには基本的なルールがあることに注意してください。注釈はプログラム コードの実行に影響を与えることはできません。注釈が追加されたり削除されたりしても、コードは一貫して実行されます。さらに、一部の注釈は実行時に Java のリフレクション API メソッドを通じてアクセスされますが、Java 言語インタープリターは動作中にこれらの注釈を無視します。コード内で注釈タイプが「機能しない」のは、Java 仮想マシンが注釈を無視しているためです。注釈タイプの情報は、一部のサポート ツールを介してのみアクセスおよび処理できます。この記事では、標準のアノテーション タイプとメタ アノテーション タイプについて説明します。これらのアノテーション タイプに付属するツールは、Java コンパイラです (もちろん、何らかの特別な方法でそれらを処理します)。
メタデータ(メタデータ)とは:
メタデータは、「データに関するデータ」を意味する単語メタデータから翻訳されています。
メタデータには多くの機能があります。たとえば、Javadoc コメントを使用してドキュメントを自動生成したことがあると思います。これはメタデータ関数の一種です。一般に、メタデータはドキュメントの作成、コードの依存関係の追跡、コンパイル時の形式チェックの実行、および既存の構成ファイルの置き換えに使用できます。メタデータの役割を分類する場合、現時点では明確な定義はありませんが、その役割に基づいて大きく次の 3 つのカテゴリに分けることができます:
1. ドキュメントの作成: コードで特定されたメタデータを介してドキュメントを生成する
2. コード分析: コード内で特定されたメタデータを通じてコードを分析します
3. コンパイル チェック: コード内で特定されたメタデータにより、コンパイラーは基本的なコンパイル チェックを実装できます
Java では、メタデータは Java コード内に存在するタグの形式で存在します。メタデータ タグは、プログラム コードのコンパイルや実行には影響しません。他のファイルを生成するため、または実行時に実行されるコードの記述情報を知るためにのみ使用されます。
まとめると:
まず、メタデータはJavaコード内にタグの形で存在します。
第二に、メタデータによって記述される情報はタイプセーフです、つまり、メタデータ内のフィールドは明確なタイプを持っています。
第三に、メタデータは、他のプログラムコンポーネントを生成するために、コンパイラー以外のツールによる追加の処理を必要とします。
4番目に、メタデータはJavaソースコードレベルでのみ存在することも、コンパイルされたクラスファイル内に存在することもできます。
アノテーションとアノテーションの種類:
アノテーション:
アノテーションは java5.0 によってもたらされた新しい構文を使用し、その動作は public や Final などの修飾子と非常によく似ています。各アノテーションには名前があり、メンバーの数は 0 以上です。アノテーションの各メンバーには、name=value ペア (JavaBean と同様) と呼ばれる名前と値があり、name=value によってアノテーションの情報がロードされます。
アノテーションタイプ:
アノテーションタイプは、アノテーションの名前、タイプ、メンバーのデフォルト値を定義します。 Annotation 型は特殊な Java インターフェイスであると言え、そのメンバー変数は制限されており、Annotation 型を宣言する際には新しい構文が必要です。 Java リフレクション API を介して Annotation にアクセスすると、戻り値はアノテーション型インターフェイスを実装したオブジェクトになります。このオブジェクトにアクセスすることで、その Annotation メンバーに簡単にアクセスできます。次の章では、java5.0 の java.lang パッケージに含まれる 3 つの標準アノテーション タイプについて説明します。
注釈のカテゴリ:
アノテーションパラメータの数に応じて、アノテーションを次の3つのカテゴリに分類できます:
1. マーカーアノテーション: メンバー定義のないアノテーションタイプをマークアノテーションと呼びます。この注釈タイプは、それ自体の有無のみを使用して情報を提供します。たとえば、次のシステム アノテーション @Override; 2. 単一値のアノテーション
3. 完全なアノテーション
1. JDK 組み込みシステム アノテーション
2メタ アノテーション
3. カスタム アノテーション
システム組み込みの標準アノテーション: アノテーションの構文は、@ 記号の使用を除いて、基本的に Java の固有の構文と一致しています。 JavaSE に組み込まれ、java.lang で定義されている 3 つの標準アノテーション:
@Override: このメソッドを変更して親クラスのメソッドを上書きするために使用されます
@Deprecated: 廃止されたメソッドを変更するために使用されます
@SuppressWarnings: 通知するために使用されます。 Java コンパイラは、特定のコンパイル警告を抑制します。
@Override、親クラスメソッドのオーバーライドに限定: @Override は、アノテーションメソッドとして使用されるマークアノテーションタイプです。これは、アノテーションが付けられたメソッドが親クラスのメソッドをオーバーロードし、アサーションの役割を果たすことを示しています。親クラスのメソッドをオーバーライドしないメソッドでこの種のアノテーションを使用すると、Java コンパイラはコンパイル エラーで警告します。このアノテーションは、親クラスのメソッドをオーバーライドしようとしたときに間違ったメソッド名を記述したときによく登場します。使用方法は非常に簡単です。このアノテーションを使用する場合は、変更したメソッドの前に @Override を追加するだけです。次のコードは、@Override を使用して、親クラスをオーバーライドする試みの displayName() メソッドを変更する例ですが、タイプミスがあります。 、 Deprecated とマーク: 同様に Deprecated もマークアップの注釈です。型または型メンバーが @Deprecated で変更されると、コンパイラーはこの注釈付きプログラム要素の使用を阻止します。そして、この種の変更にはある程度の「継続性」があります。継承または上書きを通じてこの古い型またはメンバーをコード内で使用する場合、継承またはオーバーライドされた型またはメンバーが @Deprecated として宣言されていない場合でも、コンパイラーは依然として警告する必要があります。あなた。
AppleService类的showTaste() 方法被@Deprecated标注为过时方法,在FruitRun类中使用的时候,编译器会给出该方法已过期,不推荐使用的提示。
SuppressWarnnings,抑制编译器警告:
@SuppressWarnings 被用于有选择的关闭编译器对类、方法、成员变量、变量初始化的警告。在java5.0,sun提供的javac编译器为我们提供了-Xlint选项来使编译器对合法的程序代码提出警告,此种警告从某种程度上代表了程序错误。例如当我们使用一个generic collection类而又没有提供它的类型时,编译器将提示出"unchecked warning"的警告。通常当这种情况发生时,我们就需要查找引起警告的代码。如果它真的表示错误,我们就需要纠正它。例如如果警告信息表明我们代码中的switch语句没有覆盖所有可能的case,那么我们就应增加一个默认的case来避免这种警告。
有时我们无法避免这种警告,例如,我们使用必须和非generic的旧代码交互的generic collection类时,我们不能避免这个unchecked warning。此时@SuppressWarning就要派上用场了,在调用的方法前增加@SuppressWarnings修饰,告诉编译器停止对此方法的警告。
SuppressWarning不是一个标记注解。它有一个类型为String[]的成员,这个成员的值为被禁止的警告名。对于javac编译器来讲,被-Xlint选项有效的警告 名也同样对@SuppressWarings有效,同时编译器忽略掉无法识别的警告名。
annotation语法允许在annotation名后跟括号,括号中是使用逗号分割的name=value对用于为annotation的成员赋值。实例如下:
public class FruitService { @SuppressWarnings(value={ "rawtypes", "unchecked" }) public static List<fruit> getFruitList(){ List<fruit> fruitList=new ArrayList(); return fruitList; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static List<fruit> getFruit(){ List<fruit> fruitList=new ArrayList(); return fruitList; } @SuppressWarnings("unused") public static void main(String[] args){ List<string> strList=new ArrayList<string>(); } }</string></string></fruit></fruit></fruit></fruit>
在这个例子中SuppressWarnings annotation类型只定义了一个单一的成员,所以只有一个简单的value={...}作为name=value对。又由于成员值是一个数组,故使用大括号来声明数组值。注意:我们可以在下面的情况中缩写annotation:当annotation只有单一成员,并成员命名为"value="。这时可以省去"value="。比如将上面方法getFruit()的SuppressWarnings annotation就是缩写的。
SuppressWarnings注解的常见参数值的简单说明:
1.deprecation:使用了不赞成使用的类或方法时的警告;
2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型;
3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
4.path:在类路径、源文件路径等中有不存在的路径时的警告;
5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;
6.finally:任何 finally 子句不能正常完成时的警告;
7.all:关于以上所有情况的警告。
学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群:159610322 我们一起学Java!
以上がJava の深い理解: アノテーションの基本概念の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。
