2016-04-28 23 views
0

我有以下方法,我希望傳遞不同的對象(PO​​JO)。我應該如何正確處理初始化ArrayList outObjects?結果如下代碼警告在這條線:我想傳遞不同的對象到我的方法,如何解決ArrayList是一個原始類型...警告

ArrayList outObjects = new ArrayList<>(); 

「的ArrayList是一個原始類型引用泛型類型的ArrayList應該是參數化。」

我似乎無法找到一個解決方案如何初始化outObjects並仍然保留我的代碼funcional。我有一些基本的設計缺陷嗎?

澄清: 我希望代碼能夠處理不同類型的對象,這就是爲什麼我不能使用初始化例如。 ArrayList<Company>,我想保持它的通用性,以便它可以處理CustomerReservation等。這些對象用Object inObject給予該方法。

public List<Object> executeSelect(String query, Object inObject) { 
    ArrayList outObjects = new ArrayList<>(); 
    try { 
     ObjectMapper mapper = new ObjectMapper(); 

     PreparedStatement ps = connectionGlobal.prepareStatement(query); 
     ResultSet rs = ps.executeQuery(); 
     ResultSetMetaData rsmd = rs.getMetaData(); 

     int columns = rsmd.getColumnCount(); 
     ArrayList<String> namesOfColumns = new ArrayList<String>(); 

     for (int i = 0; i < columns; i++) { 
      namesOfColumns.add(rsmd.getColumnName(i + 1)); 
     } 

     Object result = inObject.getClass(); 

     if (result.equals(Company.class)) { 
      outObjects = new ArrayList<Company>(); 
     } 

     while (rs.next()) { 
      Map<String, String> map = new HashMap<String, String>(); 
      for (int i = 0; i < columns; i++) { 
       String value = rs.getString(i + 1); 
       if (rs.wasNull()) { 
        map.put(namesOfColumns.get(i), "{NULL}"); 
       } else { 
        map.put(namesOfColumns.get(i), value.trim()); 
       } 

      } 

      Company company = mapper.convertValue(map, Company.class); 
      outObjects.add(company); 
     } 

    } catch (Exception e) { 
     System.out.println(e); 
    } 

    return outObjects; 
} 

回答

0

如果你只是存儲outObjects陣列型公司的對象只是使它:

ArrayList<Company> outObjects = new ArrayList<>(); 

,或者如果你需要存儲的其他對象,你可以把它:

ArrayList<Object> outObjects = new ArrayList<>(); 
+0

感謝您的建議。如果我嘗試初始化它作爲ArrayList對象,我在這裏得到的問題'if(result.equals(Company.class)){ \t \t \t \t outObjects = new ArrayList (); \t \t \t}類型不匹配:無法從ArrayList 轉換爲ArrayList 解決該問題的任何提示? – Tuukka

+0

如果您需要保留不同類型的對象,那麼只需將'outObjects'保留爲ArrayList ,並且不要使用'outObjects = new ArrayList ();'行來更改它,只需刪除該行即可。 –

+0

啊輝煌,我不知道爲什麼我補充說!它解決了這個問題。先生非常感謝您! – Tuukka

0

由於所有類都在Java中擴展Object,並且期望的類不會共享另一個子類,所以可以像這樣初始化它。

ArrayList<Object> outObjects = new ArrayList<Object>(); 
+0

對不起,問題不清楚,我打入標題,我想通過不同的對象。示例類型Company,Reservation,Customer。編輯這個問題。 – Tuukka

相關問題