2013-03-21 39 views
0

我打算接受一個具有特定值的csv文件。有沒有什麼辦法可以提取Java中的數組中的對象的所有屬性名稱

如果有一個人的類,它有姓名,電子郵件,PHONENUMBER等

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

set(); 
get(); 
} 

而且CSV文件「的名字:這些數值會againsts對象

實例的屬性來驗證「,」email「,我想寫一個驗證邏輯,它將根據對象屬性檢查csv的內容。

回答

1

使用反射,你可以看到哪些字段是類:

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

然後,您可以採取的字段名稱形成CSV和比較其價值。

+0

請注意,在OP的示例中,這些字段是「private」。 – NPE 2013-03-21 20:53:32

+0

對,我沒有注意到,謝謝你的評論。但是,有一種方法可以使它們可用。 http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html – 2013-03-21 20:56:08

+0

@NPE,@J_D OP只需要字段名稱,它們應該可以用'getDeclaredFields()'看到。 – dcernahoschi 2013-03-21 21:00:36

0

我通常會用這個解決方案。這是一個謂詞,所以它是可重用的。取決於你使用哪種謂詞,可以將它與番石榴或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; 
    } 
} 
相關問題