注釈とは:
注釈 (アノテーション) は、任意の情報およびメタデータ (メタデータ) をメタプログラム内の要素に関連付けるために 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 コード内にタグの形式で存在します。
第 2 に、メタデータによって記述される情報はタイプセーフです。つまり、メタデータ内のフィールドは明確なタイプを持っています。
第三に、メタデータには、他のプログラム コンポーネントの生成に使用されるコンパイラ以外のツールによる追加の処理が必要です。
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. 完全なアノテーション
アノテーションの使用法と目的に応じて、アノテーションは次の 3 つのカテゴリに分類できます。
1. JDK 組み込みシステム アノテーション 2. メタ アノテーション 3. カスタム アノテーション
-------------------------------------------------- ----------------------------------
システム組み込みの標準注釈:
アノテーションの構文は、@ 記号の使用を除いて比較的単純です。JavaSE には 3 つの標準アノテーションが組み込まれており、これらは java.lang で定義されています。
@Override: このメソッドを変更して親クラスのメソッドをオーバーライドするために使用されます。
@Deprecated: 廃止されたメソッドを変更するために使用されます。
@SuppressWarnings: 特定のコンパイル警告を抑制するように Java コンパイラーに通知するために使用されます。
3 つの組み込みの標準アノテーションの機能と使用シナリオを順番に見てみましょう。
-------------------------------------------------- ----------------------------------
@Override、親クラスメソッドのオーバーライドを制限します。
@Override は、メソッドに注釈を付けるために使用されるマーカー注釈タイプです。これは、アノテーションが付けられたメソッドが親クラスのメソッドをオーバーロードし、アサーションの役割を果たすことを示しています。親クラスのメソッドをオーバーライドしないメソッドでこの種のアノテーションを使用すると、Java コンパイラはコンパイル エラーで警告します。このアノテーションは、親クラスのメソッドをオーバーライドしようとしたときに間違ったメソッド名を記述したときによく登場します。使用方法は非常に簡単です。このアノテーションを使用する場合は、変更したメソッドの前に @Override を追加するだけです。次のコードは、@Override を使用して親クラスをオーバーライドしようとする displayName() メソッドを変更する例ですが、スペル エラーがあります。
public void displayName(){
System.out.println("果物の名前は:*****");
}
}
クラス Orange extends Fruit {
@オーバーライド
public void displayName(){
System.out.println("果物の名前はオレンジです");
}
}
クラス Apple extends Fruit {
@オーバーライド
public void 表示名(){
System.out.println("果物の名前はリンゴです");
}
}
@Deprecated、タグは非推奨です:
同様に、Deprecated もマークアップ アノテーションです。型または型メンバーが @Deprecated で修飾されている場合、コンパイラーはこの注釈付きプログラム要素の使用を阻止します。そして、この種の変更にはある程度の「継続性」があります。継承または上書きを通じてこの古い型またはメンバーをコード内で使用する場合、継承またはオーバーライドされた型またはメンバーが @Deprecated として宣言されていない場合でも、コンパイラーは依然として警告する必要があります。あなた。
@Deprecated アノテーション タイプと javadoc の @deprecated タグには違いがあることに注意してください。前者は Java コンパイラによって認識され、後者は javadoc ツールによって認識され、ドキュメント (プログラムの理由を含む) を生成するために使用されます。メンバーは廃止されており、それを禁止または置き換える方法の説明)。
Java 5.0 でも、Java コンパイラは依然として @deprecated Javadoc タグを検索し、以前のバージョンと同様にそれらを使用して警告メッセージを生成します。ただし、この状況は後続のバージョンでは変わるため、@deprecated javadoc タグの代わりに @Deprecated を使用して非推奨のメソッドを修飾する必要があります。
次のプログラムでは、 @Deprecated アノテーションを使用してメソッドを期限切れとしてマークします。同時に、メソッド アノテーションで @deprecated タグを使用してメソッドを期限切れとしてマークします。コードは次のとおりです。
/**
* @deprecated このメソッドは有効期限が切れているため、推奨されません。
*/
@非推奨
public void showTaste(){
System.out.println("フルーティーなリンゴの味は、シャキシャキしていて甘いです");
}
public void showTaste(int typeId){
if(typeId==1){
System.out.println("果物のリンゴの味は: 酸っぱいです");
}
else if(typeId==2){
System.out.println("フルーティーなリンゴの味は: 甘い");
}
それ以外{
System.out.println("フルーティーなリンゴの味は、シャキシャキしていて甘いです");
}
}
}
パブリック クラス FruitRun {
/**
* @param 引数
*/
public static void main(String[] args) {
Apple apple=new Apple();
apple.displayName();
AppleService appleService=new AppleService();
appleService.showTaste();
appleService.showTaste(0);
appleService.showTaste(2);
}
}
-------------------------------------------------- ----------------------------------
SuppressWarnings、コンパイラ警告を抑制します。
@SuppressWarnings は、クラス、メソッド、メンバー変数、変数の初期化に関するコンパイラ警告を選択的にオフにするために使用されます。 java5.0 では、sun が提供する javac コンパイラには、コンパイラが正当なプログラム コードに対して警告できるようにする -Xlint オプションが用意されています。この警告は、ある程度のプログラム エラーを表します。たとえば、型を指定せずにジェネリック コレクション クラスを使用すると、コンパイラは「未チェックの警告」という警告を表示します。通常、これが発生した場合は、警告の原因となったコードを見つける必要があります。それが本当にエラーを表している場合は、それを修正する必要があります。たとえば、コード内の switch ステートメントが考えられるすべてのケースをカバーしていないことを警告メッセージが示している場合は、この警告を回避するためにデフォルトのケースを追加する必要があります。
たとえば、非ジェネリックの古いコードと対話する必要があるジェネリック コレクション クラスを使用する場合、この警告を回避できない場合があります。このとき、@SuppressWarning が便利です。呼び出されたメソッドの前に @SuppressWarnings 変更を追加して、このメソッドに関する警告を停止するようにコンパイラーに指示します。
SuppressWarning はマークアップ アノテーションではありません。これには String[] 型のメンバーがあり、このメンバーの値は禁止された警告名です。 javac コンパイラの場合、-Xlint オプションで有効な警告名は @SuppressWarings でも有効であり、コンパイラは認識できない警告名を無視します。
アノテーション構文では、アノテーション名の後に括弧を付けることができます。括弧内には、アノテーションのメンバーに値を割り当てるために使用されるカンマ区切りの name=value ペアがあります。例は次のとおりです。
@SuppressWarnings(value={ "rawtypes", "未チェック" })
public static List<Fruit> getFruitList(){
List<フルーツ> FruitList=new ArrayList();
フルーツリストを返します。
}
@SuppressWarnings({ "rawtypes", "未チェック" })
public static List<Fruit> getFruit(){
List<フルーツ> FruitList=new ArrayList();
フルーツリストを返します。
}
@SuppressWarnings("未使用")
public static void main(String[] args){
List<String> strList=new ArrayList<String>();
}
}
SuppressWarnings によって注釈が付けられた一般的なパラメータ値の簡単な説明:
1.非推奨: 非推奨のクラスまたはメソッドが使用された場合の警告。
2. unchecked: チェックされていない変換が実行された場合の警告。たとえば、コレクションを使用する場合、保存されるコレクションのタイプを指定するためにジェネリックが使用されません。
3.fallthrough: Switch プログラム ブロックが Break なしで次の状況に直接つながる場合の警告。
4.path: クラスパス、ソースファイルパスなどに存在しないパスがある場合に警告します。
5.serial: シリアル化可能なクラスでserialVersionUID定義が欠落している場合の警告。
6.finally:finally 節が正常に完了できない場合の警告。
7.all: 上記のすべての状況に関する警告。