そして最後、@Interceptとpublic final class InterceptMatcher
は、前に書いたので、最後に、、、
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* CsvparserをimplementsするCSV解析作業クラスの変数フィールドで、
* CSV1行を String にすることを約束する変数フィールドに付与する。
* boolean 値 = true : 括り文字有り
* = false : 括り文字無し
*
* public class Sample implements Csvparser{
* @CsvArray(true) private String strs; // strs[0] が、CSV 1列目データ
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface CsvArray{
boolean value();
}
========================
import java.io.File;
/**
* CSV解析インターフェース.
* CSV解析→任意の処理をコールバックで実行するためのインターフェース.
* CSVファイル解析→1行単位にこのインターフェースで指定する parse メソッドが実行され
* @CsvArray を付与した String フィールドに、split した結果が格納されて、
* parse メソッドで参照できる。
* 必ず、CsvparseBuilder によって生成しなければならない。
* 【使用例】
* // Csvparser 実装クラス
* public class Sample implements Csvparser{
* @CsvArray(false) private String strs;
* @Intercept(Csvparser.CSV_PARSE)
* public void parse(File file){
* // strs[0] は、カンマ区切りで split した先頭の文字列
*
* }
* }
* // 呼び出し
* Csvparser csv = CsvparseBuilder.create(Sample.class);
* csv.parse(new File(csvPath));
* // ファイルの読込等の記述は、呼び出し側で書かない。
*/
public interface Csvparser{
/**
* CSV解析メソッド識別子.
* @Interceptの引数で、 parserメソッド Csvparser#parse(File) に付与して
* splitを約束させる識別子
*/
public final static String CSV_PARSE = "CSV_PARSE";
/**
* CSV解析実行.
* CSV 1行毎に実行される。
* @param file 対象CSVファイル
*/
public void parse(File file);
}
===========
1年前に思いついたことの整理だが、
やっぱり
@Intercept(Csvparser.CSV_PARSE)
public void parse(File file){
と書くのは、くどい感じがする。