Generics und Typerkennung

suithedoc

Mitglied
Hi, Ich habe eine Frage zu generics.
Hier mal ein Beispiel der Generic Klasse.
Java:
public class VariableValue<T>
{
private T variable;

	public VariableValue(T variable)
	{
	this.variable=variable;
	}

	public void setVariable(T variable)
	{
		this.variable = variable;
	}

	public T getVariable()
	{
		return variable;
	}
}

Nun gibt es Mehrere Klassen (A,B,C...) die das interface(I) implementieren.
Diese Klassen beinhalten unterschiedliche Objekte vom Typ VariableValue<T>
Java:
// BEISPIEL Klasse_A
//...
VariableValue<String> numOfClasses2 = new VariableValue<String>("hallo");
//...
//...
// BEISPIEL Klasse_B
VariableValue<Double> tmp2 = new VariableValue<Double>(2.8);

In einer weiteren Klasse (KLASSE_XX) sollen diese Variablen gelesen UND gesetzt werden.
KLASSE_XX kennt aber nur das Interface(I) und weiss nicht welche variablen welchen Typ besitzen.
Es sollte also selbst wissen was es speichern muss.
Java:
// KLASSE_XX
//...
I obj1; // Angenommen: Es wurde irgendwo ein Objekt der KLasse_A erstellt und hier zugewiesen.
//...
VariableValue var1 = obj1.getVariable(); // hier weiss ich den Typ nicht.
var1.setVariable("ldld"); // HIER MUSS ICH DEN TYP KENNEN

Fage ist nun, wie kann ich in der KLASSE_XX den Typ der VariableValue Objekte herausfinden um ihn korrekt zu setzen??
könnte lauter instanceof abfragen reinhauen aber das scheint mir sehr provisorisch.

Jemand ne Idee?

Ich hoffe das meine Frage verständlich ist, ist etwas schwer zu erklären.
 

andiv

Bekanntes Mitglied
einfach
Java:
var1.getClass()

aufrufen

Wird das nicht einfach VariableValue.class zurückgeben? Generics existieren zur Laufzeit ja nichtmehr und VariableValue<A>.class ist ja das gleiche wie VariableValue<B>.class.

@suitthedoc
Wie definierst du denn getValue() im Interface I? Da hast du ja auch schon das Typproblem und müsstest so etwas wie
Java:
interface I<T> {
T getValue();
}
machen.
 
Zuletzt bearbeitet:

Landei

Top Contributor
Erst einmal solltest du I generifizieren:
Java:
public interface I<X,Y,Z> {
      public VariableValue<X> getVar1();
      public VariableValue<Y> getVar2();
      public VariableValue<Z> getVar3();
}

public class A implements I<Double, Date, String> {
      public VariableValue<Double> getVar1();
      public VariableValue<Date> getVar2();
      public VariableValue<String> getVar3();
}
Das hilft dir in deinem Beispiel aber noch nicht unmittelbar weiter (außer vielleicht, dass man über Reflection die Belegung von X,Y,Z herausbekommen kann, aber das ist auch nicht eleganter als instanceof). Man müsste mehr über das Projekt wissen, um ein besseres Design zu finden. Wo kommen z.B. die zu setzenden Werte her, wenn du nicht mal den benötigten Typ kennst? Warum wird VariableValue benutzt statt "direkten" Generics, etwa:
Java:
public interface I<X,Y,Z> {
      public X getVar1();
      public void setVar1(X x);
      public Y getVar2();
      public void setVar2(Y y);
      public Z getVar3();
      public void setVar3(Z z);
}

public class A implements I<Double, Date, String> {
      public Double getVar1();
      public void setVar1(Double x);
      public Date getVar2();
      public void setVar2(Date y);
      public String getVar3();
      public void setVar3(String z);
}
?
 
Zuletzt bearbeitet:

suithedoc

Mitglied
Ok, is halt doch komplizierter.

@andiv
klar habe ich das Problem schon beim Interface. Ich möchte natürlich keinen speziellen Typen zurückgeben.
Java:
// Interface
VariableValue getVariable(); // Ich ignoriere die Warnung

Es war etwas ungeschickt von mir die Methode im Interface I ebenfalls getVariable() zu nennen.

Aber wenn ich mir eure Antworten so anschaue, bleibt mir wohl nichts anderes übrig, als den Typ entweder mit instaceof oder getClass() zu erfragen.

Ich hoffte es gibt eine Funktion zum automatischen Typecasting die ich nicht kenne.
 

andiv

Bekanntes Mitglied
Das riecht gewaltig nach Designfehler.

Erklär mal was du vorhast und wozu du das alles brauchst, dann können wir dir sagen wie du das ganze besser machen könntest.
 

suithedoc

Mitglied
Hi, das hätte sicher geschickter geplant werden können. Allerdings ist es nicht so tragisch, kann das Problem auch anders lösen.

Das Projekt ist etwas komplizierter (zumindest für mich :) ) .
Ich werde morgen das ganze etwas genauer erläutern, dann habe ich mehr Zeit.

Danke auf jeden Fall schonmal.

Bis morgen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Generics machen mich verrückt Java Basics - Anfänger-Themen 8
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
MarvinsDepression Datentypen Generics: Erste Berührungen Java Basics - Anfänger-Themen 6
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
Cassy3 Generics - CompareTo Java Basics - Anfänger-Themen 21
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
districon Generics implementieren Java Basics - Anfänger-Themen 2
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Hilfe bei Generics Java Basics - Anfänger-Themen 11
G Generics Compilerfehler Java Basics - Anfänger-Themen 6
G Generics Methoden Java Basics - Anfänger-Themen 7
G Generics Java Basics - Anfänger-Themen 3
L Generics Tripel Java Basics - Anfänger-Themen 26
W Fragen zu Generics Java Basics - Anfänger-Themen 14
S Hilfe. Generics und BiFunctions Java Basics - Anfänger-Themen 10
X Wie Generics richtig benutzen ? Java Basics - Anfänger-Themen 5
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Java Generics factory method Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
I Generics und Comparable Java Basics - Anfänger-Themen 14
G Generics mit ? und Diamantoperator Java Basics - Anfänger-Themen 4
G Generics: Wildcard ? Java Basics - Anfänger-Themen 12
D Generics methode Java Basics - Anfänger-Themen 2
I Frage zu Generics und Wildcards Java Basics - Anfänger-Themen 2
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
A Generics Java Basics - Anfänger-Themen 6
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
W Generics - Typ zurückbekommen Java Basics - Anfänger-Themen 4
Dimax Erste Schritte Generics von Profis leicht erklärt Java Basics - Anfänger-Themen 7
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
J Collections Generics: Typ wird nicht erkannt Java Basics - Anfänger-Themen 7
D Generics ArrayList: Bug im Quellcode Java Basics - Anfänger-Themen 14
C Generics Java Basics - Anfänger-Themen 8
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
T Generics in Java... Java Basics - Anfänger-Themen 9
J Generics Java Basics - Anfänger-Themen 3
J Generics Datentypen vergleichen Java Basics - Anfänger-Themen 16
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
O Generics - Implementierung Java Basics - Anfänger-Themen 7
Shizmo Frage zu Generics Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
H Typsicherheit/Generics Java Basics - Anfänger-Themen 1
U Java generics funktioniert nicht Java Basics - Anfänger-Themen 0
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Generics Java Basics - Anfänger-Themen 4
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
R Compiler-Fehler Generics Problem Java Basics - Anfänger-Themen 2
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
K Generics bei Klassen- und Interfacedeklarationen Java Basics - Anfänger-Themen 3
D toArray und Generics Java Basics - Anfänger-Themen 2
D Zwei Generics beim Überladen von Methoden Java Basics - Anfänger-Themen 3
C Erste Schritte Filter für Generics oder ähnliches Java Basics - Anfänger-Themen 2
M Frage zu Generics-Deklaration Java Basics - Anfänger-Themen 5
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
J Java Generics - Frage zu Types Java Basics - Anfänger-Themen 2
M <T> Generics Java Basics - Anfänger-Themen 7
B Interface Generics: prüfen ob Interface deklariert wird Java Basics - Anfänger-Themen 18
T Polymorphie Generics-Problem Java Basics - Anfänger-Themen 2
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Array Generics Java Basics - Anfänger-Themen 3
J Generics casten Java Basics - Anfänger-Themen 14
J Generics wildcard Java Basics - Anfänger-Themen 6
E Listen und Generics Java Basics - Anfänger-Themen 9
X Generics Java Basics - Anfänger-Themen 6
M Datei einlesen mit generics? Java Basics - Anfänger-Themen 9
D Warum sind Generics mit Vorsicht zu genießen? Java Basics - Anfänger-Themen 6
M OOP Mit Generics auf Methoden zugreifen? Java Basics - Anfänger-Themen 10
S Generics Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
L Datentypen Problem mit Generics und null Java Basics - Anfänger-Themen 6
E Klassen java.util.ArrayList<E> als Generics Java Basics - Anfänger-Themen 16
W Interface Problem mit Generics Java Basics - Anfänger-Themen 2
M OOP Generics und Wildcards Java Basics - Anfänger-Themen 3
D Generics - Warnmeldungen Java Basics - Anfänger-Themen 2
M Polymorphie generics einsteigerprobleme Java Basics - Anfänger-Themen 3
D Vererbung Generics und Vererbung Java Basics - Anfänger-Themen 8
C Generics Array Java Basics - Anfänger-Themen 43
D Fehler mit generics Java Basics - Anfänger-Themen 10
S Generics - CaseInsensitiveMap selber schreiben? Java Basics - Anfänger-Themen 5
K Datentypen Generics Java Basics - Anfänger-Themen 3
P Comparable und Generics Java Basics - Anfänger-Themen 6
I Generics (Subtypen) Java Basics - Anfänger-Themen 17
N Typeinschränkung bei Generics Java Basics - Anfänger-Themen 13
C Generics und Cast Java Basics - Anfänger-Themen 5
H Generics werden in -source 1.2 nicht unterstützt Java Basics - Anfänger-Themen 16
M Datentypen Generics: Exacten Typ ermitteln Java Basics - Anfänger-Themen 6
N Generics und Interfaces Java Basics - Anfänger-Themen 5
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
lumo Java Generics Java Basics - Anfänger-Themen 19
M verlinkte Liste mit generics Java Basics - Anfänger-Themen 7
capgeti Datentypen Static methoden aus Superklasse mit Generics definieren? Java Basics - Anfänger-Themen 9
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
B Java Listen und Generics Java Basics - Anfänger-Themen 35
O Abstract Method & Generics Java Basics - Anfänger-Themen 10
K Aufgabe Generics Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben