com.github.mygreen.supercsv.annotation.CsvOverridesAttribute Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of super-csv-annotation Show documentation
Show all versions of super-csv-annotation Show documentation
CSVのJavaライブラリであるSuperCSVに、アノテーション機能を追加したライブラリです。
package com.github.mygreen.supercsv.annotation;
import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 合成のアノテーションを作成する際に、アノテーションの属性を特定して上書きするためのアノテーションです。
*
* 基本的な使い方
*
* - 属性{@link #annotation()}で上書き対象のアノテーションを指定します。
* - 属性{@link #name()}で上書き対象のアノテーションの属性名を指定します。
* - 上書きする属性のクラスタイプは合わせる必要があります。
* - 上書き対象のアノテーションが複数指定されている場合、属性{@link #index()}で指定します。
*
* - 値0から始まります。
* - インデックスを指定しない場合は、該当するアノテーションの属性が全て上書きされます。
*
*
*
*
*
* {@literal @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})}
* {@literal @Retention(RetentionPolicy.RUNTIME)}
* {@literal @Documented}
* {@literal @Repeatable(CsvCustomComposition.List.class)}
* {@literal @CsvComposition} // 合成のアノテーションであることを示すためのメタアノテーション
* {@literal @CsvDefaultValue(value="0", cases=BuildCase.Read)}
* {@literal @CsvRequire}
* {@literal @CsvNumberRange(min="0", max="100,000,000", groups=NormalGroup.class)}
* {@literal @CsvNumberRange(min="0", max="100,000,000,000", groups=ManagerGroup.class)} // 上書き対象のアノテーション
* public {@literal @interface} CsvCustomComposition {
*
* // 2番目(インデックスが1)の{@literal @CsvNumberRange}の属性maxの上書き
* {@literal @CsvOverridesAttribute(annotation=CsvNumberRange.class, name="max", index=1)}
* String managerSalaryMax() default "100,000,000,000,000";
*
* // 繰り返しのアノテーションの格納用アノテーションの定義
* {@literal @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})}
* {@literal @Retention(RetentionPolicy.RUNTIME)}
* {@literal @Documented}
* {@literal @interface} List {
*
* CsvCustomComposition[] value();
* }
* }
*
*
* @since 2.0
* @author T.TSUCHIE
*
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(CsvOverridesAttribute.List.class)
public @interface CsvOverridesAttribute {
/**
* 上書き対象のアノテーションのクラスタイプを指定します。
* @return 上書き対象のアノテーションのクラスタイプ
*/
Class extends Annotation> annotation();
/**
* 上書き対象のアノテーションの属性名を指定します。
* 省略した場合、付与した属性名が採用されます。
* @return 上書き対象のアノテーションの属性名。
*/
String name() default "";
/**
* 複数同じアノテーションが指定されている場合に、インデックス番号で特定するために指定します。
* @return 指定する場合は0から始めます。
*/
int index() default -1;
/**
* アノテーションを複数個指定する際の要素です。
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface List {
CsvOverridesAttribute[] value();
}
}