idk.cpp Posted February 5, 2014 Share Posted February 5, 2014 (edited) 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 Edited February 5, 2014 by idk.cpp Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now