idk.cpp Geschrieben 5. Februar 2014 Share Geschrieben 5. Februar 2014 (bearbeitet) Hallo Leute... mir war mal wieder etwas langweilig, außerdem habe ich die generischen Klassen durchschaut und wollte auch mal wieder einen Post schreiben. Also kommt hier mein JHowToAlles3 WTF ist eine generische Klasse? Das kann ich so leider nicht erklären aber wenn du weiter liest dann wirst du es verstehen. Es geht darum, wenn man eine Klasse für einen speziellen Zweck macht, dann kann es sein das man sie für einen anderen auch haben will. ZB ein Queue für Strings und eines für Integers. Es ist witzlos das Set nocheinmal für Integers zu schreiben wenn man es schon für Strings gemacht hat, daher Generisch. Wie sieht eine generische Klasse aus? Hier an diesen (doch recht unnötigem) Beispiel sieht man den Aufbau. Diese Klasse ermöglicht einem Element vom Typ E einen String zuzuweisen. public class NameHolder<E> { private E object; private String name; public NameHolder(E obj, String name) { object = obj; this.name = name; } public E getObject() { return object; } public String getName() { return name; } } Ich kenne keinen Typ E! Verarschen? Nein! Es gibt tatsächlich keinen Typ E aber der ist auch nicht nötig. Das ist der Sinn von generischen Klassen. Derjenige der die Klasse schreibt muss nicht wissen für welchen Typen sie ist. Der Nutzer bestimmt welcher Typ der Typ E ist: [...] NameHolder<Socket> nsock = new NameHolder<Socket>(mySock, "Verbindung zu MCForum.de"); [...] In diesem Beispiel wird das E zum Typ Socket. Zugegeben das Beispiel könnte man auch mit Object statt generisch machen aber dann wäre es nicht typsicher. Wenn man zB in der späteren Verarbeitung eine Socket mit Namen braucht dann kann man das mit einem NameHolder<Socket> machen während die Lösung mit Object nicht sinnvoll wäre. Klassen mit mehreren generischen Komponenten Set-Klassen haben 2 generische Komponenten. Key und Value können verschiedenen Typs sein: public class CustomMap<K,V> implements Map<K,V> { [...] } Wie viele generische Komponenten (bzw ob es ein Limit gibt) weiß ich nicht, aber ich glaube das ist unbegrenzt. Generische Methoden Funktioniert ungefähr so: [modifizierer] [Typ Parameter] Return-Typ name( Parameter ) public < E > Integer doStuff(E arg0) Noch ein bisschen zu den Möglichkeiten vom Typ Parameter Diese Sachen gehen: <E> <E extends Something> <? extends Something<E>> ... Falls noch Fragen bitte stellen. LG idk.java bearbeitet 5. Februar 2014 von idk.cpp Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden