Hallo,
ich habe eine HashMap, um schnell auf meine "JobWrapper" Daten zugreifen zu können. Mit der unteren Methode sollen die toString() Representanten der JobWrapper Elemente sortiert werden, allerdings nicht nach der Reihenfolge der toString Ausgabe, sondern nach den Comparable-Kriterium von JobWrapper. Das funktioniert soweit, nur ist mir eine Warning nicht ganz klar und die Verallgemeinerung der Methode bereiten mir noch Schwierigkeiten.
1. Wieso kommt die Warnung "Type safety: Unchecked invocation sort(List<JobWrapper>) of the generic method sort(List<T>) of type Collections"? Ich benutze doch bereits die Generics-Version, oder?
2. Nun möchte ich eine allgemeinere Methode für weitere Maps haben. Dies wollte ich über die Generics lösen, das scheint aber so nicht zu funktionieren. Oben mein fehlerhafter Ansatz(Fehlermeldung: "Cannot instantiate the type Vector<?>", da vermutlich der Typ von Vector bereits bekannt sein muß!?):
ich habe eine HashMap, um schnell auf meine "JobWrapper" Daten zugreifen zu können. Mit der unteren Methode sollen die toString() Representanten der JobWrapper Elemente sortiert werden, allerdings nicht nach der Reihenfolge der toString Ausgabe, sondern nach den Comparable-Kriterium von JobWrapper. Das funktioniert soweit, nur ist mir eine Warning nicht ganz klar und die Verallgemeinerung der Methode bereiten mir noch Schwierigkeiten.
Code:
private String[] sortCache(Map<String, JobWrapper> cache, boolean reverseOrder) {
List<JobWrapper> list = new Vector<JobWrapper>(cache.values());
if (reverseOrder) {
Collections.sort(list, Collections.reverseOrder());
} else {
Collections.sort(list); //WARNING hier
}
String[] str = new String[list.size()];
for (int i=0; i<list.size(); i++) {
str[i] = list.get(i).toString();
}
return str;
}
1. Wieso kommt die Warnung "Type safety: Unchecked invocation sort(List<JobWrapper>) of the generic method sort(List<T>) of type Collections"? Ich benutze doch bereits die Generics-Version, oder?
Code:
private String[] sortCache(Map<?, ?> cache, boolean reverseOrder) {
List<?> list = new Vector<?>(cache.values()); //ERROR hier
if (reverseOrder) {
Collections.sort(list, Collections.reverseOrder());
} else {
Collections.sort(list);
}
String[] str = new String[list.size()];
for (int i=0; i<list.size(); i++) {
str[i] = list.get(i).toString();
}
return str;
}
2. Nun möchte ich eine allgemeinere Methode für weitere Maps haben. Dies wollte ich über die Generics lösen, das scheint aber so nicht zu funktionieren. Oben mein fehlerhafter Ansatz(Fehlermeldung: "Cannot instantiate the type Vector<?>", da vermutlich der Typ von Vector bereits bekannt sein muß!?):