2014-01-16 45 views
-1

我有一個複合問題。我想要寫接收3個參數的方法:通用元素列表和反射訪問字段的方法

  • 的字符串進行比較
  • 的字段名(列表元素的)通用元素類型的
  • 列表,以它的值進行比較的第一個參數

這是我到目前爲止,但它是不完整的,因爲我不知道如何定義第二個參數,我不知道如何獲取List元素類來定義單個元素(請參閱下面的代碼中的「?????」)

public class Object1 { 
    String name; 
    ... 
} 

public class Object2 { 
    String address; 
    ... 
} 

public class MyClass { 
    ... 
    private List<Object1> list1 = new ArrayList<Object1>(); 
    private List<Object2> list2 = new ArrayList<Object2>(); 
    ... 
    private boolean isUnique(String s, List<?> list, String field) { 
     boolean result = true; 

     ?????? element = null; 
     Field f = null; 
     Class<?> c = ?????.class; 
     try { 
      f = c.getDeclaredField(field); 
      f.setAccessible(true); 
     } catch(NoSuchFieldException e) { 
      e.printStackTrace(); 
     } 

     int size = list.size(); 
     for(int i = 0; i < size; i++) { 
      element = list.get(i); 
      try { 
       if(s.equals(f.get(element))) { 
        result = false; 
        break; 
       } 
      } catch(IllegalArgumentException e) { 
       e.printStackTrace(); 
      } catch(IllegalAccessException e) { 
       e.printStackTrace(); 
      } 
     } 

     return result; 
    } 

    public boolean check(){ 
     boolean result = isUnique("Stewart", list1, "name"); 
     result = result & isUnique("21 pine", list2, "address"); 
     return result; 
    } 

} 

回答

1
Object element = null; 
    Field f = null; 
    if(list.size()>0) 
    { 
     Class<?> c = list.get(0).getClass(); 
     try { 
     f = c.getDeclaredField(field); 
     f.setAccessible(true); 
    } catch(NoSuchFieldException e) { 
     e.printStackTrace(); 
    } 

    int size = list.size(); 
    for(int i = 0; i < size; i++) { 
     element = list.get(i); 
     try { 
      if(s.equals(f.get(element))) { 
       result = false; 
       break; 
      } 
     } catch(IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch(IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
    } 

    return result; 
}else 
{ 
    return true; 
} 
+0

一些解釋:是列表列表正確的方式來聲明列表參數嗎? – ilomambo