0

我将接受具有某些值的 csv 文件。这些值将根据对象的属性进行验证

例子:

如果有一个包含姓名、电子邮件、电话号码等的人员类。

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

set();
get();
}

并且 csv 文件具有“名称”、“电子邮件”,我想编写一个验证逻辑,它将根据对象属性检查 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 回答