Java注釈と実例を深く理解する
Javaコメント
注釈は何ですか
Javaの注釈はJavaソースコードのメタデータであり、すなわち、注釈はJavaソースコードを記述するためのものである。基本的な文法は:@の後と注釈の名称です。
①Override:ある方法が親類を正しくカバーしているかどうかを識別する方法。
②Deprecated:このクラスのメンバーの使用はもう推奨されていません。これは注釈です。
③Suppres Warnings:警告情報等を抑制するために使用します。
注釈をよりよく理解するためには、自分で注釈を書いてもいいです。
@Target:注釈を制限するために使用できる場所。例えばクラスでも使えるし、方法で勝てる時は@Targetで制限できます。
@Retention:これは注釈コンパイルのクラスの状態を制御するためのもので、デフォルトはクラスにコンパイルされていますが、読みません。もう二つの状態はクラスにコンパイルしないということです。最後の一つはコンパイルが強すぎて、クラス反射で読めます。
@Dcumented:インターネットを利用して注釈を生成することができます。
@Inheited:サブクラスはコメントを引き継ぐことができますか?
以下は私達が自分で書いた注釈類です。
注釈は何ですか
Javaの注釈はJavaソースコードのメタデータであり、すなわち、注釈はJavaソースコードを記述するためのものである。基本的な文法は:@の後と注釈の名称です。
①Override:ある方法が親類を正しくカバーしているかどうかを識別する方法。
②Deprecated:このクラスのメンバーの使用はもう推奨されていません。これは注釈です。
③Suppres Warnings:警告情報等を抑制するために使用します。
注釈をよりよく理解するためには、自分で注釈を書いてもいいです。
@Target:注釈を制限するために使用できる場所。例えばクラスでも使えるし、方法で勝てる時は@Targetで制限できます。
@Retention:これは注釈コンパイルのクラスの状態を制御するためのもので、デフォルトはクラスにコンパイルされていますが、読みません。もう二つの状態はクラスにコンパイルしないということです。最後の一つはコンパイルが強すぎて、クラス反射で読めます。
@Dcumented:インターネットを利用して注釈を生成することができます。
@Inheited:サブクラスはコメントを引き継ぐことができますか?
以下は私達が自分で書いた注釈類です。
package cn.hncu.annotation;
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;
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD}) // : , @Target
public @interface MyAnno {
public String schoolName() default "hncu"; //
}
テスト、勉強、使用
package cn.hncu.annotation;
import java.util.ArrayList;
import java.util.Collection;
@MyAnno
public class AnnotationHello {
private String name="hncu";
public static void main(String[] args) {
System.out.println("hello");
}
@Override
public String toString() {
return super.toString();
}
@MyAnno(schoolName=" ")
@Deprecated
public void abc(){
System.out.println("abc...");
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public void colDemo(){
Collection col = new ArrayList();
col.add("aa");
}
// ,
@MyAnno(schoolName=" ")
public void demo(){
System.out.println("1111111");
}
@MyAnno // schoolName , 。 ,
public void demo2(){
System.out.println("1111111");
}
//@MyAnno("abc") // value,
public void demo3(){
System.out.println("33333333333");
}
}
類反射で読み出す
package cn.hncu.annotation;
import java.lang.reflect.Method;
public class UseMyAnno {
public static void main(String[] args) {
try {
Class c = Class.forName("cn.hncu.annotation.AnnotationHello");
// (@MyAnno)
boolean boo = c.isAnnotationPresent(MyAnno.class);
System.out.println(" :"+boo);
Method ms[] = c.getDeclaredMethods();
for(Method m: ms){
// (@MyAnno)
if(m.isAnnotationPresent(MyAnno.class)){
System.out.println(" :"+m.getName());
// ---- m ,
MyAnno ma = (MyAnno)m.getAnnotation(MyAnno.class);
System.out.println(" :=="+ma.schoolName());
// ,
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。