Jump to content

Java? Java! How to alles... - Teil 3 - Generische Klassen


idk.cpp

Empfohlene Beiträge

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 von idk.cpp
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B