Generics - Implementierung

oSnake

Mitglied
Hallo Leute,

ich sitze grade an ein paar Übungsaufgaben und weiss ehrlich gesagt einfach nicht was der Prof. von mir wissen will.

Hier ist das Übungsblatt : http://docdro.id/SaCo3GD

Aufgabe 1 habe ich noch hinbekommen

Code:
public class Paar<T> {
    T E;
    T Z;

    Paar(T E, T Z) {
        this.E = E;
        this.Z = Z;
    }  
  
    public T erstes(){      
        return E;
    }
  
    public T zweites(){      
        return Z;
    }
  
    public String toString(){      
        String s = (E + " " + Z);      
        return s;
    }
}

Jedoch weiss ich einfach nicht was er bei Aufgabe 2 von mir will.

Wäre super wenn Ihr mir vielleicht ein paar Denkanstösse geben könntet.

Vielen Dank im Vorraus.
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

du hast schon einen Fehler in Aufgabe 1. Die Klasse Paar soll auch für 2 unterschiedliche Typen funktionieren. Du wirst daher 2 verschiedene generische Elemente benötigen.
Siehe Aufgabe 1: Paar<E,Z> und nicht Paar<T>

Aufgabe 2: du sollst eine Klasse PaarFeld<E,Z> erzeugen. Als Attribute soll sie Feld<E> und Feld<Z> besitzen. Der Rest sollte dann klar sein oder?
 
Ich finde es komisch das viele ihre Generic Variablen nicht ordentlich benennen. Auch E und Z sind Variablen und sollte eindeutige Namen bekommen.
Java:
public class Paar<T_ERSTES, T_ZWEITES> {

    private T_ERSTES erstes;
    private T_ZWEITES zweites;

    public Paar(T_ERSTES erstes, T_ZWEITES zweites) {
        this.erstes = erstes;
        this.zweites = zweites;
    }
 
    public T_ERSTES erstes(){ 
        return erstes;
    }
 
    public T_ZWEITES zweites(){
        return zweites;
    }
 
    @Override
    public String toString(){
        return String.format("(%s,%s)", erstes, zweites);
    }
}
 
T = Type
E = Element
K = Key
V = value
N = Number

Das ist ne Convention, damit man im Code Generics von normalen klassen unterscheiden kann, von daher wenn man sich an die Konvention hält sind die ordentlich benannt
 
T = Type
E = Element
K = Key
V = value
N = Number
Das ist ja auch richtig, der Buchstabe wird ja weiterhin verwendet nur erhält er zusätzliche Informationen.
In diesem Fall sagt ZWEITES oder ERSTES nicht soviel aus. Aber wie würde man nun Generics deklarieren die zwei Types haben? T1 und T2 ? (in der Annahme das S,U,V auch schon weg sind)
Hier würde wieder der normale Ratschlag gelten; benenne Variablen aussagekräftig.

Edit:
Google verwendet hier z.B.: die Deklaration ClassName + Variable Letter
FooBarE
FooBarK
FooBarV
FooBarN
usw.
 
Zuletzt bearbeitet:
Code:
public class PaarFeld <FeldEins , FeldZwei> {
   FeldEins feld1;
   FeldZwei feld2;

   PaarFeld(FeldEins feld1 , FeldZwei feld2) {
     this.feld1 = feld1;
     this.feld2 = feld2;
   }
}

Wie ich verstanden habe müssen jetzt die Felder auf die Paare referenzieren ?
Also bei der Aufgabe 2.
 
Zuletzt bearbeitet von einem Moderator:
Das ist ja auch richtig, der Buchstabe wird ja weiterhin verwendet nur erhält er zusätzliche Informationen.
In diesem Fall sagt ZWEITES oder ERSTES nicht soviel aus. Aber wie würde man nun Generics deklarieren die zwei Types haben? T1 und T2 ? (in der Annahme das S,U,V auch schon weg sind)
Hier würde wieder der normale Ratschlag gelten; benenne Variablen aussagekräftig.

Edit:
Google verwendet hier z.B.: die Deklaration ClassName + Variable Letter
FooBarE
FooBarK
FooBarV
FooBarN
usw.
Java:
/**
 * Represents a function that accepts two arguments and produces a result.
 * This is the two-arity specialization of {@link Function}.
 *
 * <p>This is a <a href="package-summary.html">functional interface</a>
 * whose functional method is {@link #apply(Object, Object)}.
 *
 * @param <T> the type of the first argument to the function
 * @param <U> the type of the second argument to the function
 * @param <R> the type of the result of the function
 *
 * @see Function
 * @since 1.8
 */
@FunctionalInterface
public interface BiFunction<T, U, R> {
Als Beispiel aus Java8. Und es gibt keine Klasse die T, S, U, V und mehr braucht..

@TE: Ja, damit referenzieren die Attribute deiner Klasse auf das gleiche Objekt, das übergeben wurde. Jetzt musst du nurnoch den unteren Teil der Aufgabe einfügen
 

Zurück
Oben