References to generic type Test.A<typ> should be param

Status
Nicht offen für weitere Antworten.

halber

Mitglied
Hier erstmal den auf das Problem reduzierten Code.
Code:
public class Test {	
	public static abstract class A <typ>{		

		protected typ t;
		
		abstract void setT( typ t);		
		abstract typ parse(String str);
		
		public typ getT(){
			return this.t;
		}
		
		public static class B extends A <Integer> {
			
			void setT( Integer t){
				this.t = t;
			}
			
			Integer parse(String str){
				return new Integer(Integer.parseInt(str));
			}			
		}
	}
	
	public static void main(String[] args){
		A a = new A.B();
		a.setT(a.parse("123"));	/* Type safety: The method setT(Object) belongs to the raw type 
						 * Test.A. References to generic type Test.A<typ> should be 
						 * parameterized
						 */
		System.out.println(a.getT());
	}
}
Ja das Problem ist ganz einfach, dass ich bei der Zeile a.setT(a.parse("123")); die Warnung bekomme, die im Kommentar steht. Wüste ganz gerne was es genau damit auf sich hat und was ich ändern muss, damit ich diese Warnung weg bekomme.

Die Frage habe ich in einem anderem Forum schonmal gestellet, aber leider noch keine Antworten erhalten die mich weiter bringen.
forum.javacore.de/viewtopic.php?t=3367
 
B

Beni

Gast
Du benutz eine Variable vom Typ A. A erwartet seiner "setT"-Methode aber ein Argument von Typ T. Da du T nicht definierst hast (auf Variablen-Ebene!), gibts es eine Warnung.
Code:
A<Integer> a = new A.B();
a.setT( 123 );
 

halber

Mitglied
Erstmal danke für die sehr schnelle Antwort.
Denke das habe ich auch verstanden nur ergibt sich damit ein neues Problem. In meiner eigentlichen Anwendung habe ich noch weitere Unterklassen von A, die unterschiedliche Typen für typ haben ( Unterklasse B hat im Beispiel Integer ). Das was in der main() passiert, passiert bei der Anwendung zur Laufzeit. Ich bestimme zur Laufzeit ein Objekt der Unterklassen von A, und rufe über einen Superklassen-Verweis von A die Methoden auf.

Das Problem besteht hier darin, dass ich bei der Deklaration von dem Superklassen-Verweises nicht den Typ für typ angeben kann. Sollte heißen:
Code:
A<Integer> a;
kann ich nicht machen, weil ich mit diesem Verweis auch auf eine weitere Unterklasse C (nicht im obigem Beispiel enthalten), die als Typ typ z.B Boolean hat, verweisen können will.
Kann ich diese Warnung dann überhaupt vermeiden?
 
B

Beni

Gast
Nunja, du musst halt an mehreren Orten Generics verwenden. Irgendwo bist du an einer Stelle an der du den echten Typ kennst (irgendwann musst du B oder C instanziieren), von da aus kannst du dann den Typ weiterreichen.
Generics können auch nur für eine Methode eingeführt werden:
Code:
public <T> void doIt( A<T> a ){
  a.setT( a.parse( "123" ));
}

Eine ganz andere Idee: wieso lässt du A beim parsen den Wert nicht gleich selbst speichern? Immerhin kennt A seinen Typ.
 

halber

Mitglied
Beni hat gesagt.:
Nunja, du musst halt an mehreren Orten Generics verwenden. Irgendwo bist du an einer Stelle an der du den echten Typ kennst (irgendwann musst du B oder C instanziieren), von da aus kannst du dann den Typ weiterreichen.
Wie kann ich denn einen Generischen Typen weiterreichen? Vielleicht stehe ich jetzt auf dem Schlauch, aber ich wüste jetzt nicht wie.

Beni hat gesagt.:
Eine ganz andere Idee: wieso lässt du A beim parsen den Wert nicht gleich selbst speichern? Immerhin kennt A seinen Typ.
Vielleicht verstehe ich das aus dem gleichem Grund wie oben jetzt nicht. Könntest du das etwas erläutern.
 
B

Beni

Gast
Wenn du einen generischen Parameter T hast, kannst du ihn benutzen, um weitere Generics auszufüllen. So wandert der Wert von einem Generics zum nächsten (ganz ähnlich wie der Wert eines Integers von einer Variablen zur nächsten gereicht werden kann). Eigentlich steht alles hier drin.

Zum zweiten, guck dir die Methode "parseAndSet" an.
Code:
public static abstract class A <typ>{      

      protected typ t;
      
      abstract void setT( typ t);      
      abstract typ parse(String str);

      public void parseAndset( String str ){
            setT( parse( str ));
      }

      public typ getT(){
         return this.t;
      }

Code:
A<?> a = ...
a.parseAndSet( "123" );
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Eclipse 3.4(Ganymede) "find references in workspace&quo Allgemeine Java-Themen 4
T Hard References Allgemeine Java-Themen 3
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
Rakshan Generic reading of XML document from the root tag into an Collection Allgemeine Java-Themen 0
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
Neumi5694 Datentypen Generic mit parameterlosem Konstructor Allgemeine Java-Themen 4
C Generic collections und static typing Allgemeine Java-Themen 4
K Generic class und Reflection Allgemeine Java-Themen 2
K Saubere Verwendung von Generic Types Allgemeine Java-Themen 7
T Generic Allgemeine Java-Themen 1
C Generic-Funktion nur bei bestimmten Typen erlauben Allgemeine Java-Themen 6
M Cannot create a generic array of T Allgemeine Java-Themen 5
N Generic extends Generic Allgemeine Java-Themen 5
TheWhiteShadow Generic Bug? Allgemeine Java-Themen 19
P Generic zur Laufzeit Allgemeine Java-Themen 4
X Generic muss zwei Klassen/Interfaces erfüllen Allgemeine Java-Themen 5
S Reflection und Generic Allgemeine Java-Themen 9
G Klasse eines Generic Allgemeine Java-Themen 6
J Generic von einer ArrayList/HashMap bekommen Allgemeine Java-Themen 7
G Generic merhfach Angabe Allgemeine Java-Themen 8
Dragonfire Generic Typ zur Laufzeit Allgemeine Java-Themen 9
N Casten durch generic vermeiden ?? Allgemeine Java-Themen 10
N generic reflection Allgemeine Java-Themen 5
thE_29 Generic Methoden die sich aufrufen wollen nicht immer Allgemeine Java-Themen 12
A Generic-Problem. was meint ihr dazu? Allgemeine Java-Themen 4
G unbekanntes Generic Allgemeine Java-Themen 12
K Bound mismatch: The generic method sort(List<T>) of ty Allgemeine Java-Themen 4
V ArrayList ist nicht generic!?? Oder bin ich blöd? Allgemeine Java-Themen 2
G [quote]the type HashMap is not generic; it cannot be paramet Allgemeine Java-Themen 4
C Generic Type ermitteln Allgemeine Java-Themen 3
byte Generic Type einer List zur Laufzeit rausfinden? Allgemeine Java-Themen 4
M java: unexpected type Allgemeine Java-Themen 2
BinFox Type-Parameterverwirrung Allgemeine Java-Themen 7
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
K Wildcard und class type Allgemeine Java-Themen 9
bueseb84 required a bean of type that could not be found. Allgemeine Java-Themen 2
E javax.mail sene Type ändern Allgemeine Java-Themen 2
T JNA: Invalid sizeof type 4 Allgemeine Java-Themen 0
P List<Type> Konvertieren in List<List<Type>> Allgemeine Java-Themen 3
Tarrew Generics - Type erasure Allgemeine Java-Themen 5
S Welcher Schleifen type für eine Berechnung Allgemeine Java-Themen 7
D Type herausfinden Allgemeine Java-Themen 15
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
V Wildcard aus Parameter in return type Allgemeine Java-Themen 2
P Default constructor cannot handle exception type Allgemeine Java-Themen 6
C Kompletter Pfad aus "input type=file" auslesen Allgemeine Java-Themen 3
I Library für High Performance Mime Type Erkennung Allgemeine Java-Themen 8
P Mime Type aus Stream lesen Allgemeine Java-Themen 5
J BufferedImage aus PNG Files haben keinen Type Allgemeine Java-Themen 4
G POI: Leere Zelle nimmt keinen Type an Allgemeine Java-Themen 8
S Type safety Warnings beim casten von Generics Allgemeine Java-Themen 6
M Type-Cast Allgemeine Java-Themen 3
B Warum return type Object ? Allgemeine Java-Themen 4
G Generics in Map. Type of value abhängig vom key Allgemeine Java-Themen 3
S Innerer Type einer generischen Collection herausfinden? Allgemeine Java-Themen 13
S Collection Type Allgemeine Java-Themen 8
zilti NetBeans 6.0: neuen File Type definieren Allgemeine Java-Themen 2
S anderer Mime Type bei xml-Datei Allgemeine Java-Themen 2
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
A serial Version UID field of type long Allgemeine Java-Themen 5
G Enclosing Type Allgemeine Java-Themen 3
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
T Generics, Enumerations und Type-Casts Allgemeine Java-Themen 13
K The method clone() from the type Object is not visible. Allgemeine Java-Themen 9
C REG_BINARY Type in Windows Registry ausgeben ? Allgemeine Java-Themen 4
M Content-Type setzen und auslesen? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben