Kleine Generics Aufgabe aus einer Prüfung... wie ist das gemeint?

vandread

Aktives Mitglied
Hallo Leute,

ich schreib am Freitag eine Prüfung und bei den Übungen ist mir jetzt eine Aufgabe in die Finger gekommen wo ich erst mal 5 mal lesen musste um zu verstehen was der gute Professor da eigentlich will...

Um ehrlich zu sein bin ich mir nicht sicher was er da will :)

Hier die Originale Aufgabe: https://dl.dropbox.com/u/14115692/Aufgabe.pdf

Aufgabentext:
Die Klasse GenUtils enthält die Klassenmethode addAndDisplay(), die ein Objekt vom generischen Typen T zu einer Arraylist<T> hinzufügt. Anschließend wird der Inhalt der Liste ausgegeben. Programmieren Sie die Methode addAndDisplay() aus.

In main() der Klasse TestGenUtils, schreiben Sie bitte einen Aufruf der Klassenmethode addAndDisplay(), der einen Integer mit dem Wert 5 zu einer Arraylist hinzufügt (10 min)


Soweit so gut... Ich möchte jetzt anmerken dass bei den Aufgaben immer platz gelassen wird wenn man irgendwo was ergänzen muss, auch oben bei den Klassennamen usw... (Siehe PDF)

Ich weiß nicht ob ich die Aufgabe richtig verstanden habe aber meine Lösung sieht wie folgt aus:

Java:
public class GenUtils<T> {

    public void addAndDisplay(T element, ArrayList<T> list) {
        list.add(element);

        for (T e : list) {
            System.out.println(e);
        }
    }
}

Java:
public class TestGenUtils {

    public static void main(String[] args) {
        ArrayList<Integer> myList = new ArrayList<>();

        GenUtils<Integer> gu = new GenUtils<>();

        gu.addAndDisplay(5, myList);
    }
}

Es gibt da nur ein Problem... oben bei "class GenUtils" wurde kein Platz gelassen um eine Typvariable reinzuschreiben, also muss wohl meine Lösung falsch sein... Außerdem finde ich das auch sehr komisch... Vielleicht denke ich ja auch nur falsch...
Außerdem ist in der Aufgabe nur von addAndDisplay() die rede als würde die Methode keine Übergabeparameter besitzen...

Deswegen wollte ich mal wissen was ihr dazu sagt...
 
J

JohannisderKaeufer

Gast
Es wird verlangt dass
Code:
addAndDisplay()
eine Klassenmethode ist. Das was du gemacht hast sind so gesehen Instanz-Methoden.

Das Schlüsselwort, dass verwendet werden soll heißt static.
Und static Methoden können auch Parametrisiert werden, allerdings nicht über die Klasse.

Java:
import java.util.*;

public class GenUtils {

  public static <T> void addAndDisplay(T element, Collection<T> list){
    list.add(element);
    for(T t:list){
      System.out.println(t);
    }
  }

}

Java:
import java.util.*;
public class TestGenUtils{

  public static void main(String[] args){
    List<Integer> list = new ArrayList<>();
    GenUtils.addAndDisplay(5, list);
  }
}

Statt die Interface Collection und List, gutem Programmierstil entsprechend, kann man der Aufgabenstellung entsprechend auch direkt gegen ArrayList programmieren.

In der Aufgabenstellung wird auch von main(), anstatt wie vorgegeben main(String[] args) geschrieben, deshalb gehe ich davon aus, daß bei addAndDisplay() auch die Argumente weggelassen wurden, um Konsistent zu bleiben.
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Die Lösung ist korrekt, aber...

Es wird verlangt dass
Code:
addAndDisplay()
eine Klassenmethode ist. Das Und static Methoden können auch parametrisiert werden, allerdings nicht über die Klasse.

So weit so gut, aber das geht genauso mit nicht-statischen Methoden.

Es ist verwirrend zu sagen, dass eine Methode "über die Klasse parametrisiert" wird. Entweder die Klasse ist parametrisiert (dann können die entsprechenden Parameter auch von der (nicht-statischen) Methode benutzt werden), oder die Methode selbst ist parametrisiert, oder beides.
 

vandread

Aktives Mitglied
Vielen Dank für die Hilfe! :)

Nur eine kleine Frage...

Und static Methoden können auch Parametrisiert werden, allerdings nicht über die Klasse.

Wie darf ich das Verstehen?
Also ein kleines Beispiel...

Java:
public class Foo {
 
  public static <T> T bla(T val){
    return val;
    }
  }
 
}

Das geht so okay...
Die Methode ist static und wurde selber parametrisiert...

Was aber wenn ich sowas hier mache?

Java:
public class Foo <T> {

 public void bla(T val){
    System.out.println(T);
    }
  }

  public static <T> T bla(T val){
    return val;
    }
  }
 
}

Das dürfte ja nach deiner Aussage nicht gehen...
Logisch kann ich mir das nur so erklären dass wenn ich noch keine Instanzerzeugt habe die static Methode gar nicht wissen kann für das T steht... daher müsste es wohl so aussehen:

Java:
public class Foo <T>{

 public void bla(T val){
    System.out.println(T);
    }
  }

  public static <X> X bla(X val){
    return val;
    }
  }
 
}

Die Parameter müssen unterschiedlich sein?!
 

KSG9|sebastian

Top Contributor
Java:
class My<A> {

   // verwendet das A aus der Klasse
   public A getA(){ return null; }

   // ein "neues" A wird definiert, dieses neue A entspricht NICHT dem A der Klasse/des Objekts
   // Die IDE meldet auch als Warning: "the parameter type A is hiding the type A"
   public <A> A getAnother(){ return null; }
}

Der Code sollte es erklären.
 

Landei

Top Contributor
Was aber wenn ich sowas hier mache?

Java:
public class Foo <T> {

 public void bla(T val){
    System.out.println(T);
    }
  }

  public static <T> T bla(T val){
    return val;
    }
  }
 
}

Das dürfte ja nach deiner Aussage nicht gehen...

Doch, nur ist das T, das die Methode verwendet, ein anderes als das der Instanz. Allerdings vermute ich, dass der Compiler meckert, weil die beiten Ts dieselbe Erasure [c]Object[/c] haben, und damit die beiden Methoden [c]bla[/c] ins Gehege kommen. Müsste man mal ausprobieren. Aber wenn die Methoden unterschiedlich heißen, sollte es auf jeden Fall gehen.

Logisch kann ich mir das nur so erklären dass wenn ich noch keine Instanzerzeugt habe die static Methode gar nicht wissen kann für das T steht... daher müsste es wohl so aussehen:

Java:
public class Foo <T>{

 public void bla(T val){
    System.out.println(T);
    }
  }

  public static <X> X bla(X val){
    return val;
    }
  }
 
}

Die Parameter müssen unterschiedlich sein?!

Nein, müssen sie nicht. Wie gesagt weiß ich jetzt aus dem Hut nicht genau, ob eine der beiden Methoden umbenannt werden müsste, aber prinzipiell kannst du ein "Klassen-T" und ein völlig unabhängiges "Methoden-T" haben. Selbst ohne
Code:
static
würde das funktionieren:

Java:
public class Foo <T>{

 public void bla1(T val){
    System.out.println(T);
    }
  }

  public <T> T bla2(T val){
      return val;
    }
  }
 
}

Ob das eine gute Idee ist, sein einmal dahingestellt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N kleine Kommazahlen erscheinen plötzlich Allgemeine Java-Themen 19
T Kniffel: kleine Straße Allgemeine Java-Themen 6
I GUI für kleine Pop-Ups unter Windows Allgemeine Java-Themen 1
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
Soloeco Kleine Optimierungsfrage Allgemeine Java-Themen 6
RalleYTN Classpath Nur ne kleine Frage zur MANIFEST.MF Allgemeine Java-Themen 4
Y Kleine Frage zu String.split Allgemeine Java-Themen 3
W Kleine Frage zu Null-Pinter-Exception Allgemeine Java-Themen 21
D Kleine Frage zum öffnen eines Fensters Allgemeine Java-Themen 10
A Drucken auf kleine Formate Allgemeine Java-Themen 2
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
musiKk Best Practice für kleine Variationen in gegebenen Modellklassen Allgemeine Java-Themen 11
nrg Kleine Hilfe mit RegEx Allgemeine Java-Themen 2
L Kleine Rekursion Allgemeine Java-Themen 12
B Kleine Frage zu Modellierung (Videothek) Allgemeine Java-Themen 2
J Eine kleine Aufnahme mit Java Allgemeine Java-Themen 3
J Kleine Hilfe zum Framework Click Allgemeine Java-Themen 2
Lulumann6 kleine frage zu KeyEvents Allgemeine Java-Themen 10
G Kleine Frage zu Vectoren Allgemeine Java-Themen 2
D kleine SQL-Hilfe benötigt: not a single-group group function Allgemeine Java-Themen 4
T Designfrage: Viele, kleine Objekte Allgemeine Java-Themen 13
M Schnell kleine Hilfe gesucht! Allgemeine Java-Themen 3
T kleine mp3 Lib Allgemeine Java-Themen 17
K Mit Java kleine Freeware Programme erstellen. Geht das? Allgemeine Java-Themen 16
L kleine frage zum rechner Allgemeine Java-Themen 7
V kleine Threadfrage Allgemeine Java-Themen 10
T Kleine Verständnisfrage zu Stringbuffer Allgemeine Java-Themen 2
K Kleine Exception Frage ! Allgemeine Java-Themen 3
B Wie heißt dieser kleine Typ links oben? Also dieses JavaVieh Allgemeine Java-Themen 5
J Best Practice Generics mit Enum Allgemeine Java-Themen 3
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
P Generics und Arrays Allgemeine Java-Themen 6
M Generics / Typen Allgemeine Java-Themen 1
Kirby.exe InsertionSort mit Generics Allgemeine Java-Themen 33
Kirby.exe Vererbung bei Generics Allgemeine Java-Themen 7
H Klarnamen etc... (von Wie Generics lernen?) Allgemeine Java-Themen 26
D Wie Generics lernen? Allgemeine Java-Themen 26
L Compiler-Fehler Generics beim Anhängen von Predicates Allgemeine Java-Themen 1
W Vererbung Generics - mal wieder die verhaßte Rückwärtskompatibilität Allgemeine Java-Themen 2
S Verstaendnisfrage Generics Allgemeine Java-Themen 19
W Generics + Vererbung Allgemeine Java-Themen 47
I Methoden Generics-Methode Allgemeine Java-Themen 3
D Mit Generics arbeiten - Übungsaufgabe Allgemeine Java-Themen 3
K Factory Pattern: Mit Generics umgehen Allgemeine Java-Themen 6
G Generics Allgemeine Java-Themen 31
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
Hacer Generics & Collections Allgemeine Java-Themen 8
Neumi5694 Interface Generics für Enum-Filterung verwenden Allgemeine Java-Themen 5
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
C Gemeinsame Oberklasse zweier Generics Allgemeine Java-Themen 10
erdmann Datentypen Methodendeklaration mit Generics Allgemeine Java-Themen 2
Z Datentypen Verschachtelte Generics Allgemeine Java-Themen 1
Neumi5694 Datentypen Generics Allgemeine Java-Themen 5
S Mit Generics Klasse erstellen die selbst T erweitert..? Allgemeine Java-Themen 4
Tarrew Generics - Type erasure Allgemeine Java-Themen 5
N Problem mit Generics und Interface Allgemeine Java-Themen 4
H Generics als Parameter Allgemeine Java-Themen 1
kaoZ Generics und Vererbung Allgemeine Java-Themen 3
A Datentypen Generics: Wie am besten auf Typparameter zugreifen Allgemeine Java-Themen 2
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
G Generics sind zu streng - oder ich zu naiv? Allgemeine Java-Themen 3
G Verschachtelte Generics Allgemeine Java-Themen 2
O Generics Allgemeine Java-Themen 42
M Problem mit Generics Allgemeine Java-Themen 10
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
H Collections Generics und Reflection Allgemeine Java-Themen 6
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
H Problem mit Java Generics Allgemeine Java-Themen 6
J Generics: Typparameter als Klasse zurückliefern Allgemeine Java-Themen 4
H Generics Allgemeine Java-Themen 5
P Probleme mit Generics Allgemeine Java-Themen 5
B Generics und primitve arrays Allgemeine Java-Themen 6
M Generics Allgemeine Java-Themen 11
1 Collections Generics, internes Verhalten Allgemeine Java-Themen 16
T Warnungsfreie Verwendung von Generics Allgemeine Java-Themen 11
M Probleme mit Generics Allgemeine Java-Themen 5
D Java Generics Allgemeine Java-Themen 8
2 Generics: bounded wildcards Allgemeine Java-Themen 4
J Generics / vermeiden von downcasts Allgemeine Java-Themen 2
2 Generics oder nicht? Allgemeine Java-Themen 8
E Problem mit Generics und Comparable Allgemeine Java-Themen 16
W Erweitern einer Klasse mit Generics Allgemeine Java-Themen 8
H Generics für Methode Allgemeine Java-Themen 14
N Überladen mit Hilfe von Generics Allgemeine Java-Themen 3
S Generics: Fuer Set<T> ein T-Klassenobjekt erhalten? Allgemeine Java-Themen 3
Q Der innere Typ von Generics? Allgemeine Java-Themen 3
N Generics-NullpointerException Allgemeine Java-Themen 7
2 Generics - Typ Allgemeine Java-Themen 12
P Generics Problem Allgemeine Java-Themen 10
S Type safety Warnings beim casten von Generics Allgemeine Java-Themen 6
N Generics Allgemeine Java-Themen 3
V Frage zu Generics Allgemeine Java-Themen 2
S java generics klassen deklaration Allgemeine Java-Themen 7
B hashtable für unterschiedliche Typen - mit Generics Allgemeine Java-Themen 8
E Generics Allgemeine Java-Themen 3
MQue Generics Allgemeine Java-Themen 4
R Problem mit Reflection und Generics Allgemeine Java-Themen 3
C Klassen, die aufeinander verweisen (mit Generics) Allgemeine Java-Themen 16

Ähnliche Java Themen

Neue Themen


Oben