Mittels Generics eine Methode verallgemeinern

Status
Nicht offen für weitere Antworten.

Krabat

Bekanntes Mitglied
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.

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ß!?):
 

clemson

Bekanntes Mitglied
bei deiner ersten variante muss die klasse / das interface JobWrapper das interface Comparable implementieren.
Code:
public static 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);
	}

	String[] str = new String[list.size()];
	for (int i = 0; i < list.size(); i++)
	{
		str[i] = list.get(i).toString();
	}
	return str;
}

Code:
public interface JobWrapper extends Comparable<JobWrapper>
{

}

bzw.

Code:
public class JobWrapper implements Comparable<JobWrapper>
{

	public int compareTo(JobWrapper jobWrapper)
	{
		// comparison implementation
		return 0;
	}

}





bei deiner zweiten variante musst du der list mitteilen, dass dein zu sortierendes objekt Comparable implementieren muss, da ja ansonsten nicht sortiert werden kann...
Code:
public static <T extends Comparable<? super T>> String[] sortCache(Map<String, T> cache, boolean reverseOrder)
{
	List<T> list = new Vector<T>(cache.values());
	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;
}
 

Krabat

Bekanntes Mitglied
Cool. Funktioniert optimal!

Die Warnung kam, obwohl ich Comparable implementiert hatte, ...
Code:
public class JobWrapper implements Comparable, Representable {...}

ich kannte die Generic-Variante von Comparable noch nicht. Dies hat die Warnings beseitigt:
Code:
public class JobWrapper implements Comparable<JobWrapper>, Representable {...}

Die Verallgemeinerung funzt nun, wie ich es mir angedacht hatte. Dank' Dir!!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
N Lottowebsite programmieren mittels Java, HTML,.... Allgemeine Java-Themen 7
W PDFs signieren mittels IText / Lowagie Allgemeine Java-Themen 0
Zrebna Möglichkeit regelmäßige indentation mittels/innerhalb Stringbuilder Allgemeine Java-Themen 14
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
D HTTP Http-Link mittels GUI schreiben Allgemeine Java-Themen 5
B Java Sternchen ausgeben mittels Rekursion Allgemeine Java-Themen 3
J GUI-Einstellungen mittels Preferences Allgemeine Java-Themen 6
Todesbote JFileChooser im Vordergrund (*.jar wird mittels shell_exec in PHP aufgerufen) Allgemeine Java-Themen 1
E Videosequenz mittels Java aus Video schneiden Allgemeine Java-Themen 10
B Ordner öffnen mittels Java in Linux-Umgebung Allgemeine Java-Themen 7
I Webseite auslesen (welche mittels Javascript Inhalt einbindet) Allgemeine Java-Themen 4
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
RySa Variablenname mittels Reflexions rausbekommen (als String) ? Allgemeine Java-Themen 9
U Classpath DLLs mittels System.load() laden: Allgemeine Java-Themen 6
T Wie rufe ich mittels String-Inhalts eine Methode auf? Allgemeine Java-Themen 3
T Exif mittels Java auslesen Allgemeine Java-Themen 14
A Sudoku mittels Backtracking Problem Allgemeine Java-Themen 6
7 Webseiten mittels Java auslesen Allgemeine Java-Themen 7
H Zwei verschiedene Dateien mittels einem Binärstream übertragen? Allgemeine Java-Themen 13
dunhillone Mittels Annotations Methoden "erweitern"? Allgemeine Java-Themen 11
S Mittels eines Applets Bilder generieren die in einer Webseite angezeigt werden..? Allgemeine Java-Themen 8
X String zerlegen mittels regulärem Ausdruck Allgemeine Java-Themen 31
O Programm mittels Java installieren Allgemeine Java-Themen 15
S Array-Sort mittels Binärsuche Allgemeine Java-Themen 2
J Setter mittels invoice aufrufen Allgemeine Java-Themen 4
S Eingabeprüfung mittels Regexp Allgemeine Java-Themen 5
J Objekt in Datei speichern mittels Streams Allgemeine Java-Themen 6
D Einfaches Nutzen von Plugins mittels generischer Methode Allgemeine Java-Themen 3
E Aus mehreren PDFs eines machen, zusammenfügen mittels iText Allgemeine Java-Themen 1
G Graph mittels Punkte erstellen Allgemeine Java-Themen 27
M Problem bei PDF-Anzeige mittels Acrobat Viewer Bean Allgemeine Java-Themen 2
G HTML Code aus String mittels REGEX entfernen Allgemeine Java-Themen 2
spacegaier Performanceproblem beim Einlesen aus Datei mittels Threads Allgemeine Java-Themen 23
G Screenshot mittels robot ausführen Allgemeine Java-Themen 4
B Html Formulare mittels Java automatisch senden Allgemeine Java-Themen 5
E import mittels Eclipse Allgemeine Java-Themen 3
F mittels Collection<A> an A.class kommen? Allgemeine Java-Themen 7
T IF Abfrage + YES_NO Option mittels JOptionPane Allgemeine Java-Themen 3
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
J Tonbalance mittels JMF regeln Allgemeine Java-Themen 3
G Font mittels ClassLoader in .jar wirft NotFoundException Allgemeine Java-Themen 10
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
G eigener logger mittels classe (dynamische logfilename) log4j Allgemeine Java-Themen 15
A FTPS bzw. FTP over SSL mittels Java Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
G mysql datum umwandeln mittels jsp Allgemeine Java-Themen 10
F Hilfe: Adjazenzmatrix mittels JUnit testen. Allgemeine Java-Themen 2
Natorion Erkennen ob das Programm mittels Jar-Datei oder class . Allgemeine Java-Themen 9
P E-Mails mittels POP3 abrufen Allgemeine Java-Themen 2
S mail von server mittels mailapi löschen Allgemeine Java-Themen 2
J Best Practice Generics mit Enum Allgemeine Java-Themen 3
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
P Generics und Arrays Allgemeine Java-Themen 6
M Generics / Typen Allgemeine Java-Themen 1
Kirby.exe InsertionSort mit Generics Allgemeine Java-Themen 33
Kirby.exe Vererbung bei Generics Allgemeine Java-Themen 7
H Klarnamen etc... (von Wie Generics lernen?) Allgemeine Java-Themen 26
D Wie Generics lernen? Allgemeine Java-Themen 26
L Compiler-Fehler Generics beim Anhängen von Predicates Allgemeine Java-Themen 1
W Vererbung Generics - mal wieder die verhaßte Rückwärtskompatibilität Allgemeine Java-Themen 2
S Verstaendnisfrage Generics Allgemeine Java-Themen 19
W Generics + Vererbung Allgemeine Java-Themen 47
I Methoden Generics-Methode Allgemeine Java-Themen 3
D Mit Generics arbeiten - Übungsaufgabe Allgemeine Java-Themen 3
K Factory Pattern: Mit Generics umgehen Allgemeine Java-Themen 6
G Generics Allgemeine Java-Themen 31
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
Hacer Generics & Collections Allgemeine Java-Themen 8
Neumi5694 Interface Generics für Enum-Filterung verwenden Allgemeine Java-Themen 5
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
C Gemeinsame Oberklasse zweier Generics Allgemeine Java-Themen 10
erdmann Datentypen Methodendeklaration mit Generics Allgemeine Java-Themen 2
Z Datentypen Verschachtelte Generics Allgemeine Java-Themen 1
Neumi5694 Datentypen Generics Allgemeine Java-Themen 5
S Mit Generics Klasse erstellen die selbst T erweitert..? Allgemeine Java-Themen 4
Tarrew Generics - Type erasure Allgemeine Java-Themen 5
N Problem mit Generics und Interface Allgemeine Java-Themen 4
H Generics als Parameter Allgemeine Java-Themen 1
kaoZ Generics und Vererbung Allgemeine Java-Themen 3
A Datentypen Generics: Wie am besten auf Typparameter zugreifen Allgemeine Java-Themen 2
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
vandread Kleine Generics Aufgabe aus einer Prüfung... wie ist das gemeint? Allgemeine Java-Themen 6
G Generics sind zu streng - oder ich zu naiv? Allgemeine Java-Themen 3
G Verschachtelte Generics Allgemeine Java-Themen 2
O Generics Allgemeine Java-Themen 42
M Problem mit Generics Allgemeine Java-Themen 10
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
H Collections Generics und Reflection Allgemeine Java-Themen 6
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
H Problem mit Java Generics Allgemeine Java-Themen 6
J Generics: Typparameter als Klasse zurückliefern Allgemeine Java-Themen 4
H Generics Allgemeine Java-Themen 5
P Probleme mit Generics Allgemeine Java-Themen 5
B Generics und primitve arrays Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben