Generics

Grombaner

Mitglied
Hallo zusammen,

es mag für viele eine Einfache Ausfgabe sein, aber ich stehe gedanklich so auf dem Schlauch, dass ich eine Lösung benötige:

Die Aufgabe ist:
Implementieren sie im vorhandenen Projekt die fehlende Methode, sodass folgendes ausgegeben wir:
Hallo ist vom Typ java.lang.String
2.3 ist vom Typ java.lang.Float
a ist vom Typ java.lang.Character

public class GenericsAufgabe<T> {



public <T, U, V> void spezialmethode(T t,U u, V v){

System.out.println(t + " ist vom Typ " + t.getClass().getName());
System.out.println(u + " ist vom Typ" + u.getClass().getName());
System.out.println(v + " ist vom Typ" + v.getClass().getName());



}



public static void main(String[] args) {
GenericsAufgabe g = new GenericsAufgabe();

String s = g.spezialmethode("Hallo");
float f = g.spezialmethode(2.3f);
char c = g.spezialmethode('a');

}



Bei den Methoden in der main wird bemänglet, dass meine spezialmethode (Object, Object, Object) nicht mit der spezialmethode in der Main mit String,Float,usw. zusammenpasst..

Ich weiiß das ist bestimmt eine einfache Aufgabe, dennoch komme ich gerade nicht drauf. Kann mir jemand dabei helfen?

Viele Grüße !

Grombaner
 

Java20134

Bekanntes Mitglied
Das Erste wäre, dass du in deiner Klassendefinition ein Generic hast, denn du aber eigentlich gar nicht benötigst und auch nicht initialisiert hast. Die Methode meldet einen Fehler, da du sie mit 3 Parametern in der Klasse beschrieben hast, aber nur einen Parameter in der main Methode übergibst.
 

Blender3D

Top Contributor
Code:
public class GenericsAufgabe<T> {

    public T spezialmethode(T t) {
        System.out.println(t + " ist vom Typ " + t.getClass().getName());
        return t;
    }

    public static void main(String[] args) {
        GenericsAufgabe<String> str = new GenericsAufgabe<String>();
        GenericsAufgabe<Float> fl = new GenericsAufgabe<Float>();
        GenericsAufgabe<Character> ch = new GenericsAufgabe<Character>();

        String s = str.spezialmethode("Hallo");
        float f = fl.spezialmethode(2.3f);
        char c = ch.spezialmethode('a');

    }
}
Du musst den Typ deiner generische Klasse festlegen.
Siehe Codebeispiel.
Die Rüchgabe macht in Deinem Beispiel auch keinen wirklichen Sinn. Du solltest zuerst einmal den Sinn einer herkömmlichen Methode verstehen, bevor Du mit generischen Methoden anfängst.
;)
 

Grombaner

Mitglied
Also Generic aus Klassendefinition nehmen
Die 2 anderen Paramer aus der Methode nehmen

Dann steht in der main noch can not convert from void to String/float/double und das ist der Punkt den ich nicht verstehe: sollte das T t nicht für einen beliebigen Typ stehen und dann fesstellen welchen Typ der Parameter in spezialmethode hat?


zur 2. Antwort:
Ich weiß nicht, ob ich das so machen darf, da die main von der Aufgabe vorgegeben war und ich nur die spezialmethode schreiben darf...

Vielen Dank für eure Antworten!
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Die Rüchgabe macht in Deinem Beispiel auch keinen wirklichen Sinn. Du solltest zuerst einmal den Sinn einer herkömmlichen Methode verstehen, bevor Du mit generischen Methoden anfängst.
Der Rückgabetyp ist void, warum sollte das keinen Sinn haben?


Dann steht in der main noch can not convert from void to String/float/double und das ist der Punkt den ich nicht verstehe: sollte das T t nicht für einen beliebigen Typ stehen und dann fesstellen welchen Typ der Parameter in spezialmethode hat?
Deine Methode gibt void zurück, und das versucht du einem String/float/double zuzuweisen, was logischerweise nicht klappt ;)

ich weiß eben nicht, ob ich den unteren Teil so abändern darf, die Aufgabenstellung besagt nur, dass ich die spezialmethode schreiben soll, der Rest war so vorgegeben...
Was genau war denn vorgegeben?
 

Grombaner

Mitglied
public static void main(String[] args) {
GenericsAufgabe g = new GenericsAufgabe();

String s = g.spezialmethode("Hallo");
float f = g.spezialmethode(2.3f);
char c = g.spezialmethode('a');

}


Die Klasse und die oben geschriebene main ist vorgegeben.

Ich soll die Methode spezialmethode schreiben, die am Ende ausgibt von welchem Typ die Parameter der spezialmethode in der main haben.
 

mrBrown

Super-Moderator
Mitarbeiter
Jetzt müsste deine Klasse generisch sein, was bei dieser Aufgabenstellung nicht klappt.
Du musst den generischen Typ noch extra angeben ;)
 

mrBrown

Super-Moderator
Mitarbeiter
Dann habe ich die Lösung bereits gepostet.
Und man sieht, dass Aufgaben nicht immer sinnvoll sind.
int gibZahlzurueck( int a ){ return a; }
int x = 1;
int y = gibZahlzurueck( x ):
kann man auch so lösen y = x;
Bravo, du hast es jemandem ermöglicht, nicht selbst auf die Lösung zu kommen :p

Und das Argument auch zurückgeben, oder zumindest den gleichen Typ zurückgeben, ist nicht sonderlich selten, guck zB mal in die Objects-Klasse^^
 

Grombaner

Mitglied
Richtig es klappt nicht und das ist eine orginal Klausuraufgabe und deshalb bin ich darüber verzweifelt, aber wenn die Aufgabenstellung schon keinen Sinn ergibt wenn man sonst nichts verändern darf dann bin ich nicht ganz so entäuscht von mir :D

Danke für eure Hilfe!
 

Blender3D

Top Contributor
Und das Argument auch zurückgeben, oder zumindest den gleichen Typ zurückgeben, ist nicht sonderlich selten, guck zB mal in die Objects-Klasse^^
Object hat nur eine Methode mit Parameter und Rückgabewert.
boolean equals( Object o);
Die gibt zurück ob das übergeben Objekt und das Objekt selbst gleich sind. Das finde ich sinnvoll.
 

Grombaner

Mitglied
Ich nehme an es Klappt nicht , da in der main für jeden Typ eine lokale Variable angelegt wird, die von der Methode einen Rückgabewert in ihrem Typ erwartet... um das zu beheben muss ich 3 Instanzen der Klasse machen und ihnen mit <> ihren Typ übergeben

Bzw.

nehme ich die lokalen variablen raus, reicht auch eine Instanz der Klasse um das gewünscht auf der Konsole auszugeben
 

Meniskusschaden

Top Contributor
Object hat nur eine Methode mit Parameter und Rückgabewert.
@mrBrown hat sich nicht auf Object bezogen, sondern auf Objects.
Eine Rückgabe ist nur dann sinnvoll, wenn der Input einen neuen Output auslösen soll.
Das kann z.B. sinnvoll sein, wenn man auf das übergebene (und zurück gegebene) Argument anschliessend direkt eine weitere Methode aufrufen möchte (oder dieselbe nochmal):object.doThis().doThat();.
Das wird zum Beispiel beim Decorator-Entwurfsmuster gerne gemacht.
 

Blender3D

Top Contributor
Das kann z.B. sinnvoll sein, wenn man auf das übergebene (und zurück gegebene) Argument anschliessend direkt eine weitere Methode aufrufen möchte (oder dieselbe nochmal):eek:bject.doThis().doThat();.
Das wird zum Beispiel beim Decorator-Entwurfsmuster gerne gemacht.
Das stimmt, aber es macht halt keinen Sinn eine weitere Methode, auf eine Methode aufzurufen, wenn der übergebene Parameter unverändert durchgeschleust wird.
int unverändert( int x ){ return x; }
int add( int a, int b );
add( 1, unverändert(2) ) == add( 1, 2 );
;)
 

Blender3D

Top Contributor
@mrBrown hat sich nicht auf Object bezogen, sondern auf Objects.
Habe ich nicht genau gelesen.
Also meint er Methoden wie
public static <T> T requireNonNull(T obj);
Die gibt es unverändert zurück stimmt. Aber hier wird der übergebene Parameter auf null geprüft und eine Exception geworfen (Ist eine zentrale Anlaufstelle der Virtual Machine, um Nullpointerexceptions zu werfen). Was man von obiger reinen Ausgabefunktion nicht behaupten kann.
 

Meniskusschaden

Top Contributor
Das stimmt, aber es macht halt keinen Sinn eine weitere Methode, auf eine Methode aufzurufen, wenn der übergebene Parameter unverändert durchgeschleust wird.
Warum denn nicht? Einzelne Gegenbeispiele belegen doch nicht, dass es nie sinnvoll ist.
Was man von obiger reinen Ausgabefunktion nicht behaupten kann.
Wir wissen ja nicht, wie die Methode später genutzt werden soll. Vielleicht ja so ähnlich, wie in diesem Beispiel:
Java:
objekt.druckeZusammenfassung().druckeDetails();
Das kann doch auch sinnvoll sein, wenn objekt durch keine der Methoden verändert wird.
 

Blender3D

Top Contributor
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
vandread Kleine Generics Aufgabe aus einer Prüfung... wie ist das gemeint? Allgemeine Java-Themen 6
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
G Generics - W.card unter Nutzung von Annotationsklasse? Allgemeine Java-Themen 6
G sortieren von generics Allgemeine Java-Themen 10
G Generics in Map. Type of value abhängig vom key Allgemeine Java-Themen 3
A Generics Verständnisfrage Allgemeine Java-Themen 7
Z Generics funzt nicht? Allgemeine Java-Themen 2
T Generics Allgemeine Java-Themen 18
G ComboBox: Nur eine Art Klasse zulassen (Generics) Allgemeine Java-Themen 3
J Generics Expertenwissen? Allgemeine Java-Themen 5
S Generics-Problem Allgemeine Java-Themen 3
T Generics und Wil-dcards Allgemeine Java-Themen 8
Q Typen von Generics & Casten Allgemeine Java-Themen 3
S Generics Allgemeine Java-Themen 2
R Problem mit Generics Allgemeine Java-Themen 2
G Trotz Generics Cast-Fehler! Allgemeine Java-Themen 5
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
T Generics und instanceof Allgemeine Java-Themen 10
T Generics und Exceptions Allgemeine Java-Themen 6
M Beliebig viele Typen bei Generics Allgemeine Java-Themen 3
G Reflection objekt mit generics erzeugen Allgemeine Java-Themen 5
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
G Generics und Comparable Allgemeine Java-Themen 11
H Generics Problem Allgemeine Java-Themen 3
F Generics: spricht etwas dagegen raw types zu verwenden? Allgemeine Java-Themen 31
M Generics - besser programmieren, Warnung umgehen Allgemeine Java-Themen 4
E Java, UML, Generics Allgemeine Java-Themen 6
P Array von Vectoren + Generics Allgemeine Java-Themen 6
M ArrayList erweitern - generics Allgemeine Java-Themen 4
E Generics -> UML Allgemeine Java-Themen 4
G Generics: Instanzieren einer Klasse in einer Methode. Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben