Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Erste SchritteGenerische Klassen sind toll ....aber warum sollte ich das je benutzen?
Auf der Suche nach einer Antwort dazu habe ich mich im Internet verloren und verlange nun hier eine Antwort. Im Grunde habe ich es verstanden, wie man damit umgeht, aber warumsollte ich jemals eine Generische Klassen benutzen wenn ich doch java.util.ArrayList habe und das ist für mich der einzige vernünftige Anwendungsgrund, der mir einfällt.
Ich meine, als Programmierer ist mir (zumindest aus meiner Erfahrung) immer bewusst gewesen was ich in den Variablen Speicher möchte aber nicht wie viel, z.B. ein Inventar das, wie bei Skyrim nach Gewicht geht anstatt nach Itemslots. Da brauche ich ein flexibles Array.
Generics werden in der Tat selten eingesetzt. Es kommt aber doch hin und wieder vor, das man sie braucht. Ich weiss nicht, wie lange du schon Java machst; aber früher oder später kommt der Tag, an dem du etwas umsetzen willst, was nur mit Generics sinnvoll machbar ist.
Vieles von dem, wofür Genrics wie geschaffen sind, ist von Java schon implementiert (so auch die ArrayList). Noch ein paar andere Beispiele:
Alle Collections:
List (ArrayList, LinkedList, DoubleLinkedList)
Set (HashSet) u.s.w.
Die Streams aus Java 8 und alle möglichen operationen mit Streams und Collections:
Stream
Consumer
Comparator und Comparable
Predicate
u.s.w.
Und gelegentlich braucht es auch mal eine generische Methode. Ich habe beispielsweise letztens folgende Methode geschrieben:
Java:
/**
* Registers the given component with the given entity.
* @param e The entity to associate the given component with. If not registered with this system yet the entity will
* be registered.
* @param c The component to register.
* @param asType The type to register the component as. This is useful for subclassed components,
* e.g. class X extends HealthComponent: registerComponent(e, new X(), HealthComponent.class))
* @throws ComponentTypeAlreadyRegisteredException If a component of type <code>asType</code> is already registered
* with the given entity.
*/
public synchronized <T> void registerComponent(Entity e, T c, Class<? super T> asType)
{ ... }
Also wenn man mit Generics nutzen nicht die Verwendung von Klassen mit Generics meint, dann ist das durchaus stimmig, dass diese seltener benutzt werden. In eigentlichen Applikationen hat man halt ein bis zum Ende durchdachtes Design und nutzt Interfaces und Oberklassen.
Aber sobald man anfängt, generische Klassen zu schreiben, dann kommen die sehr schnell auch ins Spiel. Wir haben auf Arbeit unsere eigenen Komponenten und da sind dann Generics oft genug Mittel der Wahl.
Wenn man die Nutzung von Klassen mit Generics auch als Nutzen von Generics ansieht, dann ist es übrigens ein täglich Brot, die Generics zu nutzen. Dann wird - je nach Anforderung - halt schnell eine HashMap<K,V> oder so genutzt.
Ich könnte mir eine Softwareentwicklung ohne Generics gar nicht mehr vorstellen...
Vor mehr als 10 Jahren konnte ich damit auch nix anfangen. War damals ein großer Sprung sowie seit Java8 die Lamdas und Streams... Ist der Hammer.