Jump to content

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


idk.cpp
 Share

Recommended Posts

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 by idk.cpp
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B