基本的な組み込み注記
Javaはいくつかの基本的な注釈を提供しています
@Override
Override:オーバーライドを再ロードします。子クラスが親クラスを書き換える方法では、書き換える方法を記述するために使用され、親クラスがこの方法を持っていないとコンパイルは通過できません。
@Deprecated
Override:廃棄、賛成しません。この注記は、メソッド表現を記述するために使用され、このメソッドが期限切れであることを示し、開発者に使用を推奨しない。
@SuppressWarnings
この注記は、警告情報を無視するために使用されます。
@SafeVararg
Vararg:可変パラメータ。変数パラメータを使用する場合、パラメータのタイプが汎用Tの場合、警告が表示されます。このとき、@SafeVarargsを使ってこの警告を消します。
@FunctionalInterface
関数インタフェースを記述するために使用されます。関数インタフェースとは、インタフェースに抽象メソッドが1つしかないことを意味します。インタフェースに抽象メソッドが1つしかない場合は@FunctionalInterfaceでタグできます。
メタ注記
メタデータは、データを記述するデータ、すなわち注釈です。
メタ注記は、注記を記述する注記です。
@Target
注釈がクラスを記述するために使用されるか、メソッドまたはプロパティを記述するために使用されるかを示すために、パラメータに応じて記述されるオブジェクトタイプを指定します。
ElementType.TYPE:クラス、インタフェース、列挙タイプを修飾できます
ElementType.FIELD:メンバー変数を修飾できる
ElementType.METHOD:修飾できる方法
ElementType.PARAMETER:パラメータを修飾できる
ElementType.COSTRUCTOR:コンストラクタを修飾できる
ElementType.LOCAL_VARABLE:局所変数を修飾できる
ElementType.ANNOTATION_TYPE:注釈を修飾できる
ElementType.PACKAGE:パッケージを修飾できる
@Retention
Retention:この注釈は、注釈のライフサイクルを記述するために使用されます。
RetentionPolicy.SOURCE:注記はソースコードにのみ存在し、classにコンパイルされた後、なくなります。@Override注記のように。
RetentionPolicy.CLASS:注釈はjavaファイルでプログラミングする.classファイルの後も、存在しますが、実行するとなくなります。@Retentionのデフォルト値は、@Retentionが明示的に指定されていない場合に使用されます。
RetentionPolicy.RUNTIME:注記は実行後も存在し、プログラムの実行時に反射メカニズムを使用して注記情報を取得する必要がある場合は、このメタ注記を使用します。
@Inherited Inherited:継承します。@Inheritedは、注釈に継承性があることを指定します。クラスに@xxx注記(注記を定義するときに@Inherited修飾を使用)修飾が使用されている場合、そのサブクラスは自動的に@xxx修飾されます。
@Documented
Documented:ファイル証明書が用意されています。@Documentedで記述された注記は、コードがAPIドキュメントを生成した後にAPIドキュメントに表示されます。
カスタム注記
注釈を使用する例を挙げると、データベースの使用はよく知られていると思います。データベースを使用するときは、補助クラスを書いてデータベースの接続を提供することがよくあります。DBSupportクラスなどです。
注記を使用しない
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
publicclassDBSupport{
staticStringip="localhost";
staticintport=3306;
staticStringdatabase="database";
staticStringencoding="UTF-8";
staticStringloginName="root";
staticStringpassword="password";
static{
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
}
publicstaticConnectiongetConnection()throwsSQLException{
Stringurl=String.format("jdbc:mysql://%s:%d%s?characterEncoding=%s",ip,port,database,encoding);
returnDriverManager.getConnection(url,loginName,password);
}
publicstaticvoidmain(String[]args)throwsSQLException{
System.out.println(getConnection());
}}
注記の使用方法
import staticjava.lang.annotation.ElementType.METHOD;
import staticjava.lang.annotation.ElementType.TYPE;
importjava.lang.annotation.Documented;
importjava.lang.annotation.Inherited;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
@Target({METHOD,TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documentedpublic
@interface
JDBCAnnotation{
Stringip();
intport()default3306;
Stringdatabase();
Stringencoding();
StringloginName();
Stringpassword();}
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
importJDBCAnnotation;
@JDBCAnnotation(ip="127.0.0.1",database="test",encoding="UTF-8",loginName="root",password="admin")
publicclassDBSupport{
static{
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
}
publicstaticConnectiongetConnection()throwsSQLException,NoSuchMethodException,SecurityException{
JDBCConfigconfig=DBUtil.class.getAnnotation(JDBCConfig.class);
Stringip=config.ip();
intport=config.port();
Stringdatabase=config.database();
Stringencoding=config.encoding();
StringloginName=config.loginName();
Stringpassword=config.password();
Stringurl=String.format("jdbc:mysql://%s:%d/%s?characterEncoding=%s",ip,port,database,encoding);
returnDriverManager.getConnection(url,loginName,password);
}
publicstaticvoidmain(String[]args)throwsNoSuchMethodException,SecurityException,SQLException{
Connectionc=getConnection();
System.out.println(c);
}}
1、注記タイプを定義しておきます:JDBCanotation、定義時に@interfaceを使用
public@interfaceDBAnotation
2、メタ注記:説明注記
@Documented簡単なAnnotationsタグコメントは、javaAPIドキュメントにコメント情報を追加することを示します。
@Targetは、注釈がどこで使用されるかを説明します。Target({METHOD,TYPE})は,この注釈をクラス/インタフェースに用いてもよいし,方法に用いてもよいことを示している。
@Inherited–この注釈とサブクラスの関係を定義します。この注釈はクラスに継承されます。
@Retention–注釈のライフサイクルを定義します。@Retention(RetentionPolicy.RUNTIME)は、この注釈は常に破棄されず、実行期間も保持されるため、反射メカニズムを使用して注釈の情報を読み取ることができることを示している。
3、注釈要素、これらの注釈要素は注釈情報を格納するために使用され、解析時に取得される
String ip();
int port() default 3306;
String database();
String encoding();
String loginName();
String password();
4、注釈の使用(注釈の解析)
@JDBCConfig(ip="127.0.0.1",database="test",encoding="UTF-8",loginName="root",password="admin")
publicclassDBUtil{
static{
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
}
}