0

特定の値を持つcsvファイルを受け入れます。これらの値は、オブジェクトの属性に対して検証されます

例:

名前、電子メール、電話番号などを持つ人のクラスがある場合。

public class Person{
private String name;
private String email;
private String status;

set();
get();
}

csv ファイルには「name」、「email」があります。オブジェクト属性に対して csv の内容をチェックする検証ロジックを書きたいと思います。

4

2 に答える 2

1

リフレクションを使用すると、クラスに含まれるフィールドを確認できます。

Field[] fields = Person.class.getDeclaredFields();
for(Field curField:fields)
{
    System.out.println(curField.getName());
}

その後、csv からフィールド名を取得し、その値を比較できます。

于 2013-03-21T20:53:00.843 に答える
0

私は通常、このソリューションを使用します。これは述語なので、再利用可能です。使用する述語に応じて、guava または Apache Commons Collections で使用できます。

public class BeanPropertyPredicate<T, V> implements Predicate<T> {

    // Logger
    private static final Logger log = LoggerFactory.getLogger(BeanPropertyPredicate.class);

    public enum Comparison {EQUAL, NOT_EQUAL}
    private final String propertyName;
    private final Collection<V> values;
    private final Comparison comparison;

    public BeanPropertyPredicate(String propertyName, Collection<V> values, Comparison comparison) {
        this.propertyName = propertyName;
        this.values = values;
        this.comparison = comparison;
    }

    @Override
    public boolean apply(@Nullable T input) {

        try {

            PropertyDescriptor propertyDescriptor = PropertyUtils.getPropertyDescriptor(input, propertyName);
            Object value = propertyDescriptor.getReadMethod().invoke(input);

            switch (comparison) {
                case EQUAL:
                    if(!values.contains(value))  {
                        return false;
                    }
                    break;
                case NOT_EQUAL:
                    if(values.contains(value))  {
                        return false;
                    }
                    break;
            }

        } catch (Exception e) {
            log.error("Failed to access property {}", propertyName, e);
        }

        return true;
    }
}
于 2013-03-21T20:57:00.403 に答える