注釈と反射をカスタマイズする簡単な応用
寄り添って歩まないで、千里までありません;小さな流れを積まなければ,川の海になることはできない.
文書ディレクトリ元注記 @Retention @Documented @Inherited @Target 反射(reflection) 反射の長所と短所: アプリケーション カスタム注記を作成@FiledInfo Userオブジェクトを作成する 反射方法 試験方法 メタ注記
@Retention
注記のライフサイクルの定義:source->class->runtime
@Documented
ドキュメント注記、Javadocツールによってドキュメント化されます
@Inherited
サブクラスに注釈を継承させるかどうか
@Target
注記の適用範囲について説明します type:クラス、インタフェース、注釈タイプ、または列挙タイプを修飾するために使用できることを示す. package:パッケージを修飾するために使用できます. parameter:パラメータを修飾するために使用できます. annotation_type:注釈タイプを修飾するために使用できます. method:修飾方法に使用できます. field:属性(列挙定数を含む)を修飾するために使用できます. constructor:コンストラクタを修飾するために使用できます. local_variable:ローカル変数を修飾するために使用できます.
反射(reflection)
反射のメリットとデメリット:は、反射によりjvmにロードされたクラスの内部情報にプログラムコードをアクセスさせ、ロードされたクラスの属性情報を取得し、ロードされたクラスのメソッドを取得し、ロードされたクラスの構造方法情報を取得する. 反射はJavaプログラムの柔軟性と拡張性を向上させ、結合性を低下させ、適応能力を向上させた. 反射は、コードの可読性を低下させながら、性能に一定の影響を及ぼす.
適用
仕事中にページの表示内容が不確定な場合があります.このとき、注釈と反射をカスタマイズしてみましょう.後日展示内容を増やしても対応する属性に注釈をつけるだけです.
カスタム注記の作成@FiledInfo
Userオブジェクトの作成
反射方法(Reflection Method)
テストメソッド
結果を返します.
文書ディレクトリ
@Retention
注記のライフサイクルの定義:source->class->runtime
@Documented
ドキュメント注記、Javadocツールによってドキュメント化されます
@Inherited
サブクラスに注釈を継承させるかどうか
@Target
注記の適用範囲について説明します
反射(reflection)
, , ; , ; Java 。
反射のメリットとデメリット:
適用
仕事中にページの表示内容が不確定な場合があります.このとき、注釈と反射をカスタマイズしてみましょう.後日展示内容を増やしても対応する属性に注釈をつけるだけです.
カスタム注記の作成@FiledInfo
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FiledInfo {
String name() default "";
}
Userオブジェクトの作成
@Data
@Accessors(chain = true)
public class User {
@FiledInfo(name = " ")
private String sex;
@FiledInfo(name = " ")
private String name;
private String phone;
}
反射方法(Reflection Method)
public static List<Map<String, Object>> listFiledInfo(Object object) throws Exception{
// class
Class<?> aClass = object.getClass();
Field[] fields = aClass.getDeclaredFields();
List<Map<String, Object>> list = new ArrayList<>();
for (Field field : fields) {
//
field.setAccessible(true);
//
FiledInfo info = field.getAnnotation(FiledInfo.class);
if (info != null) {
Map<String, Object> map = new HashMap<>(16);
map.put("name", info.name());
//
map.put("value", field.get(object));
list.add(map);
}
}
return list;
}
テストメソッド
public static void main(String[] args) throws Exception{
User user = new User().setName(" ").setSex(" ");
List<Map<String, Object>> list = listFiledInfo(user);
System.out.println(list);
}
結果を返します.
[{name= , value= }, {name= , value= }]