HashSet cannot be cast to java.util.ArrayList

vector_ever

Mitglied
Code:
public class Employee{
    
    private int id;
    private String name;
    private String address;
    private double salary;
//setter & getter
}

Code:
public class test{

		ArrayList check= coll (); 
		CheckCollection(check);

public static ArrayList coll (){

		ArrayList list = new ArrayList();
		Set set = new HashSet();

Employee ts1 = new Employee (10, "Jad", "L.A", 200.0);
        Employee ts2 = new Employee (11, "Amal", "Berlin", 600.0);
        Employee ts3 = new Employee (12, "Jasmin", "London", 250.0);
        Employee ts4 = new Employee (10, "sam", "Paris", 200.0);
        Employee ts5 = new Employee (14, "Adam", "NY", 210.0);

set.add(ts1);
set.add(ts2);
set.add(ts3);
set.add(ts4);
set.add(ts5);

//now convet the Set to List
list.add(set);

return list;
}

public static void CheckCollection(ArrayList data) {
ArrayList xxx= null;
for (int i = 0; i < data.size(); i++) {
	       		
	       	    xxx = (ArrayList)data.get(i);
}
}

Bei der Ausführung kriege ich Fehlermeldung:
HTML:
java.lang.ClassCastException: java.util.HashSet cannot be cast to java.util.ArrayList

Ich dachte list.add(set); hat die Elemente drin von Set zu List Konvertiert !!
 
In welcher Zeile tritt der Fehler auf? Bitte diese auch im Code markieren (Beitrag editieren).

Ist es in der Zeile mit list.add(set);?
 
Du kannst nicht einfach einen C-Style-Cast vornehmen.

Schreib es so um:
Java:
for (int i = 0; i < data.size(); i++) {
  xxx = new ArrayList(data.get(i));
}
Aber unabhängig davon, wieso verwendest du "raw types", sprich ArrayList und nicht ArrayList<T>. Man sollte fast immer einen Typ angeben können (bei dir z.B. Employee beim HashSet).
 
Klar immer Typ angeben, aber ich habe gedacht, warum ich nur HashSet benutze und vergesse von List zu Set Umwandlung

Code:
public static void main(String[] args) throws Exception{
          
        Set dataHolder = readExcelFile(); 
        saveToDatabase(dataHolder);
    }
  
        public static Set readExcelFile(){
Set dataSheet = new HashSet();
// some method here
return set;
}
 
private static void saveToDatabase(Set dataHolder) {
 Set cellStoreSet = null;
                 
            //For inserting into database
            for (int i = 0; i < dataHolder.size(); i++) {
                  
                cellStoreSet = (Set) dataHolder.get(i); // get error, ofcourse no .get(index) in HashSet
                   ps.setString(1,((<myClass>)cellStoreSet .get(0)).toString()); // ps ist PreparedStatement
                   ps.setString(2,((<myClass>)cellStoreSet .get(1)).toString());
}

Ich habe Überlegt Iterator zu benutzen
Code:
Iterator it = set.iterator();
 while (it.hasNext()){
//do something}

aber immer bleibt das Problem noch, wie kann ich das mache mit die letzte 3 zeile von der code oben
 
Ich dachte list.add(set); hat die Elemente drin von Set zu List Konvertiert !!
Nein. Es hat das Set zur Liste hinzugefügt. Deine ArrayList enthält ein einzelnes Element - das Set.

Du müßtest die addAll Methode verwenden:
Java:
list.addAll(set);
Demnach wären in deiner ArrayList aber immer noch keine ArrayLists drin, sondern Employee Objekte. Du mußt also zu Employee casten -- oder noch besser, gleich die generischen Collections verwenden wie ComFreek schon vorgeschlagen hatte.
 

Neue Beiträge

Zurück